LeetCode·101.对称二叉树·递归

链接:https://leetcode.cn/problems/symmetric-tree/solution/by-xun-ge-v-4ngq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

题目

 

示例

 

思路

解题思路
递归
递归三部曲

  1. 确定递归函数的参数和返回值

因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。
返回值自然是bool类型。
代码如下:
    bool dfs(struct TreeNode* left , struct TreeNode* right)

  1. 确定终止条件

要比较两个节点数值相不相同,首先要把两个节点为空的情况弄清楚!否则后面比较数值的时候就会操作空指针了。
节点为空的情况有:(注意我们比较的其实不是左孩子和右孩子,所以如下我称之为左节点右节点)

  • 左节点为空,右节点不为空,不对称,return false
  • 左不为空,右为空,不对称 return false
  • 左右都为空,对称,返回true

此时已经排除掉了节点为空的情况,那么剩下的就是左右节点不为空:

  • 左右都不为空,比较节点数值,不相同就return false

此时左右节点不为空,且数值也不相同的情况我们也处理了。
代码如下:
    if(left == NULL && right == NULL){
        return true;
    }else if(left == NULL || right == NULL)
    {
        return false;
    }else if(left->val != right->val)
    {
        return false;
    }
注意上面最后一种情况,我没有使用else,而是elseif, 因为我们把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。

  1. 确定单层递归的逻辑

此时才进入单层递归的逻辑,单层递归的逻辑就是处理 右节点都不为空,且数值相同的情况。

  • 比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。
  • 比较内测是否对称,传入左节点的右孩子,右节点的左孩子。
  • 如果左右都对称就返回true ,有一侧不对称就返回false 。

代码如下:


    dfs(left->left , right->right) && dfs(left->right , right->left)

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
*/
/*
*dfs:判断两个节点是否相等
struct TreeNode* left:树节点 
struct TreeNode* right:树节点
返回值:相等返回true;不相等返回false
*/
bool dfs(struct TreeNode* left , struct TreeNode* right)
{
    if(left == NULL && right == NULL)
    {
        return true;
    }else if(left == NULL || right == NULL)
    {
        return false;
    }else if(left->val != right->val)
    {
        return false;
    }
    return dfs(left->left , right->right) && dfs(left->right , right->left);
}
/*
*isSymmetric:判断一个树是不是对称
struct TreeNode* root:根节点
返回值:对称返回true;不对称返回false
*/
bool isSymmetric(struct TreeNode* root)
{
    if(root == NULL)
    {
        return true;
    }
    return dfs(root->left,root->right);
}   


作者:xun-ge-v
链接:https://leetcode.cn/problems/symmetric-tree/solution/by-xun-ge-v-4ngq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...