初识算法

对称二叉树

2019-07-28  本文已影响0人  无名指666

给定一个二叉树,要判定是否是镜像对称的
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

解法一:递归

首先看题目我们要比对他是否是镜像,就要获得每个树节点,所以我们想到了递归,然后通过树节点的条件去验证:

1、首先我们要验证的节点必须是相等的
2、假如有子树那么子树需满足该树的 左子树与另一个树的右子树一致,该的树的右子树与另一个树的左子树一致,说明该层的树是镜像的,然后继续遍历该树的左子树,右子树。。。。。

结束递归

那递归什么时候结束呢??由上面知道,有下面几种情况下递归会结束,

1、从根树节点一直到遍历所有的子树节点都比较结束。下面没有子节点了子节点都为null,说明符合镜像,那么我们的递归就该结束了,并且返回true;
2、当不符合第一种情况,但是有一个树节点为null的时候,另一个必然不为null,所以不是镜像二叉树,返回false;
3、当我们比较至某一层级某个节点时不满足上面递归所要求的两个条件,说明不是镜像二叉树,那么也就没必要继续递归了,并返回结果;

代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return isMirror(root,root);
    }

    private boolean isMirror(TreeNode t1,TreeNode t2){
        if(t1 == null &&  t2 ==null) return true;
        if(t1 == null || t2 == null) return false;

        return (t1.val== t2.val) && isMirror(t1.left,t2.right) && isMirror(t1.right,t2.left);
    }
}

每天一算法,成功有方法。坚持!!!

原文链接

https://leetcode-cn.com/problems/symmetric-tree/

上一篇下一篇

猜你喜欢

热点阅读