leetcode 101 对称二叉树

Posted 苛性氢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 101 对称二叉树相关的知识,希望对你有一定的参考价值。

 

一开始想中序遍历,然后左右判断。

但是是不对的。如果有空节点的话。

于是,空节点加数。

[1,2,3,3,null,2,null]

还是错。两个空加两个0.
0,3,0,2,0,1,0,2,0,3,0

 

再改:只有一个空才加。(指针不能异或,转成longlong)。

[5,4,1,null,1,null,4,2,null,2,null]

 还是错。这个数据很厉害。我觉得要补成满二叉树才行……放弃。

0,4,2,1,0,5,0,1,2,4,0

其实有个更可怕的,直接只有左子树。


 

 

于是开始想递归。

技术分享图片
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root){
            return true;
        }
        return soln(root->left,root->right);
    }
    bool soln(TreeNode* left,TreeNode* right){
        
        if((left==NULL)&&(right==NULL)){
            return true;
        }
        else if(left!=NULL&&right!=NULL){
            if(left->val==right->val){
                bool res=true;
                res=soln(left->left,right->right);

                res=res&&soln(left->right,right->left);
                return res;
            }
            else{
                return false;
            }
            
        }
        else{
            return false;
        }
        
        
        
    }
};
View Code

 

简化代码:(别人的)

技术分享图片
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
            return Symmetric(root,root);
    }
    bool Symmetric(TreeNode* root1,TreeNode* root2)
    {
        if(root1==NULL&&root2==NULL)
            return true;
        if(root1==NULL||root2==NULL)
            return false;
        if(root1->val!=root2->val)
            return false;
        return Symmetric(root1->left,root2->right)&&Symmetric(root1->right,root2->left);
    }
View Code

 

(还是别人的)

技术分享图片
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return !root || isSym(root->left, root->right);
    }
private:
    bool isSym(TreeNode* left, TreeNode* right) {
        return (!left && !right) || (left && right && left->val == right->val && isSym(left->left, right->right) && isSym(left->right, right->left));
    }
};
两个return

 


以上是关于leetcode 101 对称二叉树的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第101题—对称二叉树—Python实现

LeetCode 101.对称二叉树 - JavaScript

⭐算法入门⭐《二叉树》简单03 —— LeetCode 101. 对称二叉树

LeetCode-101-对称二叉树

精选力扣500题 第64题 LeetCode 101. 对称二叉树c++/java详细题解

LeetCode 101. 对称二叉树(二叉树,递归)