【小白也能懂】对称的二叉树 哪有五颗星难度 8行有效代码让你小白也能看懂题解!

对称的二叉树

http://www.nowcoder.com/questionTerminal/ff05d44dfdb04e1d83bdbdab320efbcb

题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

这题我看了一下,有些题解也太复杂了吧。其实这道题很简单,用recursion思路也清晰易懂,还不麻烦。
如果我们拥有一颗对称二叉树,他只需要满足,每个节点的左子树和右子树都是镜像。
所以解题思路分四步:

  1. 我们检测根节点是不是为null,如果是,则他肯定是对称的,直接返回true。
  2. 我们新建一个method check,用来检测当前的左子树和右子树是不是镜像。我们从根节点往下一路检测。
  3. 举个例子,首先我们检测根节点的左孩子和右孩子,如果两个都是null,说明他是镜像。但是如果有一个不为null或者他们的值不相等,则此时我们就可以判断已经是不对称的了。如果此时还是对称的而且左孩子和右孩子都分别还有各自的孩子,我们就继续检测。这时,我们需要判断,左孩子的左子树和右孩子的右子树是否镜像,及左孩子的右子树和右孩子的左子树是否镜像。
  4. 如此进入下一次循环,直到我们接触到叶节点还是镜像return true或者我们任意时刻发现不是镜像return false 为止。

具体代码如下:

public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
       if(pRoot == null){
           return true;
       } 
       return check(pRoot.left,pRoot.right);
    }

    boolean check(TreeNode l,TreeNode r){
        if(l == null && r == null){
            return true;
        }else if((l== null&&r!= null)||(l != null && r== null)||(l.val != r.val)){
            return false;
        }
        return check(l.left,r.right) && check(l.right,r.left);
    }
}
全部评论
如果我们拥有一颗对称二叉树,他只需要满足,每个节点的左子树和右子树都是镜像。 按你的理解下面这种就不是对称的吗 5 /\ 6 6 /\ /\ 4 2 2 4
点赞 回复 分享
发布于 2020-04-30 11:38

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
10-25 02:13
门头沟学院 C++
_凡_:8.27笔试10.22评估
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
14
1
分享
牛客网
牛客企业服务