题解 | #对称的二叉树#

对称的二叉树

http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

第二十三题 简单 递归判断左右是否相等
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot) {
        if(pRoot==NULL)
            return true;
        bool ret_ans=true;
        // 如果说 左右两颗子树都是空 则是true
        if(pRoot->left==NULL && pRoot->right == NULL)
            return ret_ans;
        // 如果说一边有 一遍无 则肯定错
        // 因为is_equal 传递的是整个树 所以不需要下面的判断,如果说 传入的只是左子树 和右子树 则要判断
        // if( (pRoot->left == NULL && pRoot->right!=NULL)  || (pRoot->right == NULL && pRoot->left!=NULL))
        //    return false;
        // ret_ans = is_equal(pRoot->left, pRoot->right);
        ret_ans = is_equal(pRoot, pRoot);
        return ret_ans;
    }
    
    // 递归判断 传入左右两棵子树 判断是否相等
    bool is_equal(TreeNode* left,TreeNode* right)
    {
        if(left==NULL && right==NULL)
            return true;
        
        // 如果说一边有 一遍无 则肯定错
        if( (left == NULL && right!=NULL)  || (right == NULL && left!=NULL) || left->val!=right->val )
            return false;

        bool ans=true;
        
        // 镜像判断
        // 递归调用结果 判断是否相等 左边的左子树 和右边的右子树
        ans = is_equal(left->left,right->right);
        // 有错 则往后 肯定都是错的
        if(ans==false)
            return false;
        // 判断 左边的右子树 和 右边的左子树
        ans = is_equal(left->right,right->left);
        return ans;
    }
};

题解 文章被收录于专栏

一遍做剑指offer 一边保存做题步骤 并附带详细注释哦

全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务