二叉树——101. 对称二叉树

二叉树——101. 对称二叉树

题目:

思路:

此题就是考的细,原理上不难,还是递归,那么遍历顺序是啥,答案就是后序遍历,有人结合代码看可能不理解,觉得这明明是前序遍历啊,先判断节点,再对左右节点进行递归。这是一个误导,还有就是这次写的代码可读性比较差,那么为啥是后序遍历呢,因为他是先递归然后再判断是否相等。所以是后续遍历。反正核心思想就是:比较外侧是否相等,在比较内称是否相等,都相等就对称。

其次这道题的终止条件也要明确。一共有一下五点,写的时候可以简化。

1.左为空,右不为空 false

2.左不为空,有为空 false

3.左右都为空 true

4.左右都不为空,比较节点数值不相同 false

5.相同就是 true 执行递归逻辑

以上就是这道题的全部思路剩下就是开干。

代码:

class Solution {
public:
    bool check(TreeNode* left, TreeNode* right){
        // 首先排除空节点的情况
        if(left == NULL && right == NULL) return true;
        if (left == NULL || right == NULL) return false;
        return (left->val == right->val) && check(left->left, right->right) && check(left->right, right->left);
    }

    bool isSymmetric(TreeNode* root) {
        return check(root, root);
    }
};

Rank:

Tips:

刚才看了个神奇的思路,分享一下。

其实原理是一样的,但人家就是说的让你茅塞顿开hhh。

posted @ 2021-04-18 19:47  Originhhh  阅读(50)  评论(0)    收藏  举报