对称二叉树

对称二叉树

什么是对称二叉树,简单说就是两棵树是否互相翻转,若不懂翻转二叉树,请转博客。

对称二叉树_第1张图片

这就是一个对称二叉树,很容易理解,接下来我们来判断一个二叉树是不是对称二叉树。

101. 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

对称二叉树_第2张图片
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

对称二叉树_第3张图片
进阶:

你可以运用递归和迭代两种方法解决这个问题吗?

思路分析

我们首先一定要搞清楚,我们比较的是哪两个节点
对称二叉树_第4张图片
颜色相同的才是我们比较的节点,就以这个二叉树而言,根节点的左节点的左节点,与根节点的右节点的右节点作比较;根节点的左节点的右节点,与根节点的右节点的做节点作比较。

递归

我们首先拿递归来做这道题,递归由三部曲,我们按照这三部曲来学代码

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

  boolean compare(TreeNode left , TreeNode right)

2.确定终止条件
此题的终止条件有很多种

1).节点left为空,节点right不为空,返回false;
2).节点left为不为空,节点right为空,返回false;
3).节点left为空,节点right为空,返回true;
4).节点left不为空,节点right不为空,但两节点不相同,返回false;

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;

3.确定单层递归逻辑

一个节点有两个子节点,所以我们要比较的是4个节点,那我们单层逻辑就是比较这4个节点

boolean root1 = compare(left.left , right.right);
boolean root2 = compare(left.right , right.left);
//&& 若两者都为true则为true,否则false
return boolean root1 

你可能感兴趣的:(数据结构,算法,java,二叉树,算法,java,队列,栈)