leetcode 101 对称二叉树

简介: leetcode 101 对称二叉树

对称二叉树


d7d85f2619bd4230ae446fceadd4eaae.png

78d25f1553a244dba5a6b23040728386.png

对称二叉树核心是对比左子树和右子树是否对称。

即 外侧 左子树的左和右子树的右 ;
内侧 左子树的右和右子树的左

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool compare(TreeNode* cur_left ,TreeNode* cur_right)
    {
      //左子树和右子树都是空的,说明是叶子节点,对称
        if(cur_left == nullptr && cur_right == nullptr ) return 1;
        //左子树是空,右子树有值,不对称
        else if(cur_left ==nullptr && cur_right != nullptr) return 0;
        //左子树有值,右子树为空,不对称
        else if(cur_left !=nullptr && cur_right == nullptr) return 0;
        //左右子树内容不相等,不对称
        else if(cur_left->val != cur_right->val) return 0;
    //递归计算外侧和内侧的是否对称
        bool outside = compare(cur_left->left , cur_right->right);
        bool inside =  compare(cur_left->right , cur_right->left);
    //内测外侧都对称,则树对称
        return outside&&inside;
    }
    bool isSymmetric(TreeNode* root) {
    //如果是空节点,返回对称
        if(root ==nullptr) return 1;
        //递归对比左子树和右子树
        return compare(root->left , root->right);
    }
};

二刷

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool back_track(TreeNode* left_tree , TreeNode* right_tree )
    {
        if(left_tree == nullptr && right_tree == nullptr ) return true;
        else if(left_tree == nullptr || right_tree == nullptr ) return false;
        else if(left_tree->val != right_tree->val) return false;
        bool inside = back_track(left_tree->right , right_tree->left);
        bool outside = back_track(left_tree->left , right_tree->right);
        return inside&outside;
    }
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr) return true;
        return back_track(root->left , root->right);
    }
};
相关文章
|
2月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
26 2
|
2月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
20 2
|
2月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
18 2
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
21 0
|
2月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
15 0
|
2月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
23 0
|
2月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
22 0
|
2月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
19 0
|
4月前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
|
4月前
|
算法 Java
LeetCode第94题二叉树的中序遍历
文章介绍了LeetCode第94题"二叉树的中序遍历"的解法,使用递归实现了中序遍历的过程,遵循了"左根右"的遍历顺序,并提供了清晰的Java代码实现。
LeetCode第94题二叉树的中序遍历