自学内容网 自学内容网

LeetCode hot 热题100 对称二叉树

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return cheak(root->left,root->right);
    }
 private:
 bool cheak(TreeNode *left,TreeNode *right){
     if(left==nullptr&&right==nullptr) return true;
     if(left==nullptr||right==nullptr||left->val!=right->val) return false;
     return cheak(left->left,right->right)&&cheak(left->right,right->left);
 }       
    
};

思路

这段代码的目的是判断一棵二叉树是否是对称的。对称的定义是:一棵树的左子树和右子树是镜像对称的。

具体步骤:

1. 主函数 isSymmetric 调用辅助函数 cheak,比较根节点的左子树和右子树是否对称。

2. 辅助函数 cheak 递归地比较两个子树:

• 如果两个节点均为空,返回 true。

• 如果其中一个节点为空或者两个节点的值不同,返回 false。

• 如果两个节点值相同,则递归比较:

• 左子树的左子树和右子树的右子树。

• 左子树的右子树和右子树的左子树。

3. 递归结束时,如果所有对称节点都匹配,则返回 true。

运行步骤

假设有以下输入的二叉树:

       1

      / \

     2   2

    / \ / \

   3  4 4  3

1. 调用 isSymmetric 函数:

• 输入 root(根节点 1)。

• 调用 cheak(root->left, root->right),即 cheak(2, 2)。

2. 第一次调用 cheak(2, 2)

• 两个节点均不为空,且 left->val == right->val(均为 2)。

• 递归调用 cheak(2->left, 2->right) 和 cheak(2->right, 2->left),即 cheak(3, 3) 和 cheak(4, 4)。

3. 第二次调用 cheak(3, 3)

• 两个节点均不为空,且 left->val == right->val(均为 3)。

• 递归调用 cheak(3->left, 3->right) 和 cheak(3->right, 3->left),即 cheak(nullptr, nullptr)。

• 返回 true,因为两侧均为空。

4. 第二次调用 cheak(4, 4)

• 两个节点均不为空,且 left->val == right->val(均为 4)。

• 递归调用 cheak(4->left, 4->right) 和 cheak(4->right, 4->left),即 cheak(nullptr, nullptr)。

• 返回 true,因为两侧均为空。

5. 返回结果:

• 所有递归调用均返回 true,表示这棵树是对称的。

最终,isSymmetric 返回 true。

代码逻辑解释

1. 入口:

• isSymmetric 是入口函数,直接判断树是否对称。

2. 递归条件:

• 如果左右子树都为空,返回 true。

• 如果一个为空或值不相等,返回 false。

• 如果值相等,则继续递归判断其子树。

3. 递归结束:

• 当遍历到叶子节点(空节点)时,递归结束,逐步返回结果。

如果有其他问题,随时告诉我!


原文地址:https://blog.csdn.net/qq_51956059/article/details/145300883

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!