《剑指offer》刷题——【画图让抽象问题形象化】面试题28:对称的二叉树(java实现)
一、题目表述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
二、题目分析
- 前序遍历:根左右
- 前序对称遍历:根右左
- 如果前序遍历与前序对称遍历序列一样,则二叉树是对称的
- 易出错之处:
- 二叉树的根节点为null
- 只有一个节点的树
- 所有节点都相同的值
三、代码实现
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);
}
}