给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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.先判断根节点是否为null;
2.判断第一个节点的左子节点与第二个节点的右子节点是否为空及相等;
3.判断第一个节点的右子节点与第二个节点的左子节点是否为空及相等。
代码如下:
public boolean isSymmetric(TreeNode root) {
if(root==null)return true;
return adj(root.left,root.right);
}
public boolean adj(TreeNode left,TreeNode right){
if(left == null)return right==null;
if(right == null)return left==null;
return left.val==right.val
&& adj(left.left,right.right)
&& adj(left.right,right.left);
}