题目描述
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
分析
思路:
对称二叉树需要满足两个条件:
1、结构对称,即要么都为空,要么都不为空
2、结构对称后,还需要对应结点值相等
实现代码:
public class Solution {
boolean isSymmetrical(TreeNode pRoot)
{
/**对称二叉树需满足:
*1、结构是对称的
*2、结构对称后,对应结点的值也应该相等(翻转后都要相等)
*/
if(pRoot == null){
return true;
}
return isSymmetricalHelper(pRoot.left, pRoot.right);
}
boolean isSymmetricalHelper(TreeNode root1,TreeNode root2){
//1、结构对称
//1-1、两个都为空,是对称
if(root1 == null && root2 == null){
return true;
}
//1-2、一个为空,另一个不为空,肯定不对称
if((root1 == null && root2 != null) || (root1 != null && root2 == null)){
return false;
}
//2、结构对称,也就是剩下的都不为空的情况,比较两个结点值是否也相等
if(root1.val != root2.val){
return false;
}
//递归判断整棵二叉树,即翻转后对称
return isSymmetricalHelper(root1.left, root2.right) && isSymmetricalHelper(root1.right, root2.left);
}
}