题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.
public static boolean isSymmetrical(TreeNode root){
if(root==null)
return true;
return isSym(root.left,root.right);
}
private static boolean isSym(TreeNode left, TreeNode right) {
if(left==null) return right==null;
if(right==null) return left==null;
if(left.val!=right.val) return false;
return isSym(left.left,right.right)&&isSym(left.right, right.left);
}
主要就是理解二叉树的镜像定义(参照第27题),递归判断挺简单的。
- 镜像二叉树,其左右子树也必须是镜像对称的
- 镜对称像要求对称的位置上的元素相等
- 以节点A和B为根据节点的两个子树对称等价于:
- 这两个节点上存储的值相等
- 节点A的左子树节点和节点B的右子树上的节点是对称的
- 节点A的右子树节点和节点A的左子树上的节点是对称的