【剑指offer困难部分3】对称的二叉树(java)

题目描述

请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
在这里插入图片描述

分析

思路:
对称二叉树需要满足两个条件:
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);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39615182/article/details/112978668