题解 | #对称的二叉树#

对称的二叉树

https://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 recursion(TreeNode* root1, TreeNode* root2){
    //     // 可以两个都为空
    //     if(!root1 && !root2)
    //         return true;
    //     // 只有一个为空或者节点值不同,必定不对称
    //     if(!root1 || !root2 || root1->val != root2->val)
    //         return false;
    //     // 每层对应的节点进入递归
    //     return recursion(root1->left, root2->right) && recursion(root1->right, root2->left);
    // }
    bool compare(TreeNode* left, TreeNode* right){
        // 首先排除空节点的情况
        if(!left && right) return false;
        else if(left && !right) return false;
        else if(!left && !right) return true;
        // 排除了空节点,再排除值不相同的情况
        else if(left->val != right->val) return false;

        // 此时就是,左右节点都不为空,且数值相同的情况
        // 此时做递归,做下一次判断
        bool outside = compare(left->left, right->right);   // 左子树:左   右子树:右
        bool inside = compare(left->right, right->left);    // 左子树:右   右子树:左
        bool issame = outside && inside;
        return issame;
    }
    bool isSymmetrical(TreeNode* pRoot) {
        // return recursion(pRoot, pRoot);
        if(!pRoot) return true;
        return compare(pRoot->left, pRoot->right);
    }

};

来自《代码随想录》~~~

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务