对称二叉树
什么是对称二叉树,简单说就是两棵树是否互相翻转,若不懂翻转二叉树,请转博客。
这就是一个对称二叉树,很容易理解,接下来我们来判断一个二叉树是不是对称二叉树。
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
思路分析
我们首先一定要搞清楚,我们比较的是哪两个节点
颜色相同的才是我们比较的节点,就以这个二叉树而言,根节点的左节点的左节点,与根节点的右节点的右节点作比较;根节点的左节点的右节点,与根节点的右节点的做节点作比较。
递归
我们首先拿递归来做这道题,递归由三部曲,我们按照这三部曲来学代码
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