剑指offer-对称的二叉树
题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:
题目说如果一个二叉树同此二叉树的镜像是同样的,定义其为对称
,因此考虑对左子树做个镜像,然后与右子树比较各个结点即可
注意判断空指针
code
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot==null || pRoot.left==null && pRoot.right==null) {
return true;
}
if(pRoot.left==null || pRoot.right==null) {
return false;
}
Mirror(pRoot.left);
return comNode(pRoot.left,pRoot.right);
}
boolean comNode(TreeNode left,TreeNode right) {
if(left==null&&right==null) {
return true;
}
if(left!=null&&right!=null) {
if(left.val==right.val) {
return comNode(left.left,right.left)&&comNode(left.right,right.right);
}
}
return false;
}
void Mirror(TreeNode root) {
if(root==null) {
return;
}
TreeNode node=root.left;
root.left=root.right;
root.right=node;
Mirror(root.left);
Mirror(root.right);
}