剑指Offer28:对称的二叉树
题目:请实现一个函数,用来判断一棵二叉树是否是对称的,如果一棵二叉树和它的镜像一样,那么它是对称的。
这里第一颗树是对齐的,第二颗树不是对齐的,第三颗树也不是。
通常二叉树有前序,中序,后序遍历方法,而书上提出以前序对称的遍历方法,即第一颗树前序遍历的
顺序是 8,6,5,7,6,7,5 而前序对称的遍历(根右左次序) 8,6,5,7,6,7,5 即和前序遍历一样,但是用这个方法去遍历第三颗树这样就不对了,因为都是7777777,所以这里把每一层的null节点算进去了。
即7,7,null,7,7,7,7.
public boolean isSymmetric(TreeNode root) {
return isSyme(root,root); //传了2个root
}
public boolean isSyme(TreeNode root1,TreeNode root2){
if(root1==null&&root2==null){ //当且传入的2个root为空,return true.
return true;
}
if(root1==null|| root2==null){ //只有一个为空,另外没有即不堆成return false
return false;
}
if(root1.val!=root2.val){ //存在对称的点,但是值不等 return false
return false;
}
//进行左右对称的子递归
return isSyme(root1.left,root2.right)&&isSyme(root1.right,root2.left);
}
还没有评论,来说两句吧...