对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
思路+代码+注释:
public boolean isSymmetric(TreeNode root) {
/*
思路:二叉树镜像对称的就是两个节点n1、n2,n1等于n2,n1的左节点等于n2的右接点,n1的右接点等于n2的左节点
验证两个节点是否相等,再递归验证两个节点的左右子节点
两个节点某一个为null,两个节点的值不相等都说明节点不相同返回false
递归终止条件:都为null返回true
*/
//空树是对称树
if (root==null)
{
return true;
}
return isSymmetricRecursive(root.left,root.right);
}
private boolean isSymmetricRecursive(TreeNode n1,TreeNode n2)
{
if (n1==null && n2==null)
{
return true;
}
if ((n1==null && n2!=null) || (n1!=null && n2==null) || (n1.val!=n2.val))
{
return false;
}
return isSymmetricRecursive(n1.left,n2.right) && isSymmetricRecursive(n1.right,n2.left);
}