题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:1、前序遍历为根左右,我们只需要将前序遍历改为根右左,如果遍历的结果相等则表示为对称。
如图1,按照根左右结果为:8657675,根右左结果为8657675。结果相同
如图2,按照根左右结果为:8657975,根右左结果为8957675.结果不相同
2、其中需要考虑的是如果所有节点都相同,如图3。按照根左右结果为:888888,根右左结果为8888888。
所以需要考虑进空节点,根左右为:8,8,8,null,null,8,null,null,8,8,null,null,null
代码实现:
/*
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){
return isSymmetrical(pRoot,pRoot);
}
boolean isSymmetrical(TreeNode pRoot1,TreeNode pRoot2){
if (pRoot1==null &&pRoot2==null)
return true;
if(pRoot1==null||pRoot2==null)
return false;
if(pRoot1.val!=pRoot2.val)
return false;
return isSymmetrical(pRoot1.left,pRoot2.right)&&isSymmetrical(pRoot1.right,pRoot2.left);
}
}
参考资料:《剑指Offer》(第二版)