【LeetCode 30】101.对称二叉树

简介: 【LeetCode 30】101.对称二叉树

一、题意

二、思考过程

**思路:**判断二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互反转的,理解这一点之后其实知道了要比较的是两棵树,所以在递归遍历的过程中要同时遍历这两棵树,然后比较这两棵树,比较的是 两棵树的里侧和外侧元素是否相等

2.1递归法

递归法三部曲

  • 确定递归函数的参数和返回值
bool compare(TreeNode *left,TreeNode *right)
  • 确定终止条件
//首先排除空节点的情况
if(left==NULL&&right!=NULL) return false;
else if(left!=NULL&&right==NULL) return false;
else if(left==NULL&&right==NULL) 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;

递归法完整代码:

class Solution {
public:
    bool compare(TreeNode* left,TreeNode* right)
    {
        //首先排除空节点的情况
        if(left==NULL&&right!=NULL) return false;
        else if(left!=NULL&&right==NULL) return false;
        else if(left==NULL&&right==NULL) 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 isSymmetric(TreeNode* root)
    {
        if(root==NULL) return true;
        return compare(root->left,root->right);
    }
};


目录
相关文章
|
5月前
|
Java C++ Python
leetcode-101:对称二叉树
leetcode-101:对称二叉树
42 0
|
11月前
Leetcode101.对称二叉树
Leetcode101.对称二叉树
25 0
|
5月前
LeetCode——101——对称二叉树
LeetCode——101——对称二叉树
60 12
|
5月前
|
机器学习/深度学习
【力扣】101. 对称二叉树
【力扣】101. 对称二叉树
LeetCode | 101. 对称二叉树
LeetCode | 101. 对称二叉树
|
5月前
力扣101.对称二叉树
力扣101.对称二叉树
41 0
|
5月前
leetcode:对称二叉树
leetcode:对称二叉树
剑指offer 27. 对称的二叉树
剑指offer 27. 对称的二叉树
67 0
|
算法
LeetCode每日1题--对称二叉树
LeetCode每日1题--对称二叉树
74 0
|
Java C++ Python