题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路解析一
如果二叉树对称,则相应的左右子树同样为对称二叉树:左子树的左子树等于右子树的右子树,左子树的右子树等于右子树的左子树。使用递归思想即可实现。实现步骤:
1、如果根节点为空,认为该二叉树为对称二叉树;
2、如果根节点非空,比较左右子树是否相同;
2.1 如果左右节点为空,返回true;如果左空右不空返回false,如果左不空右空返回false;
2.2 如果左右均非空且值不相同返回false;
2.3 继续比较同级左子树的左节点和右子树的右节点是否相同且左子树的右节点和右子树的左节点是否相同
参考代码:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean isSymmetrical(TreeNode pRoot){
if(pRoot == null) return true;
return compareRoot(pRoot.left, pRoot.right);
}
private boolean compareRoot(TreeNode left, TreeNode right){
if(left == null) return right == null;
if(right == null) return false;
if(left.val != right.val) return false;
return compareRoot(left.right, right.left) && compareRoot(left.left, right.right);
}
}