题目:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的
例子:
代码一(递归法):
class Solution {
public boolean isSymmetric(TreeNode root) {
return symmetric(root.getLeft(), root.getRight());
}
public boolean symmetric(TreeNode A, TreeNode B){
return symmetric(A.getLeft(), B.getRight) && symmetric(A.getRight(), B.getLeft()) && (A==B || A.val == B.val);
}
}
解释一:
就是递归法,同树的镜像树一样,把树的镜像树搞清楚了,这个题目自然也就容易了。这里附上二叉树的镜像树的例子:链接,看完这个例子,再来看本题就会很简单。
代码一修正:
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return symmetric(root.getLeft(), root.getRight());
}
public boolean symmetric(TreeNode A, TreeNode B){
if(A==null && B==null) return true;
if(A==null || B==null || A.val!=B.val) return false;
return symmetric(A.getLeft(), B.getRight) && symmetric(A.getRight(), B.getLeft());
}
}
代码一忽略了null指针是没有子节点的。