对称二叉树(Java实现)
  NBGtARh4sl8T 2023年11月02日 45 0


请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

 

思路: 新建一个镜像二叉树,然后再来比较两个二叉树是否相同。 难点,另外构建2个辅助函数,2个辅助函数中分别递归。

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    
    // 辅助函数用于翻转二叉树(镜像二叉树)
    TreeNode invertTree(TreeNode root) {
        if(root == null) {return null;}
        
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }

    boolean judgeSame(TreeNode p, TreeNode n) {
        if (p == null && n == null) {
            return true;
        } 
        
        if (p == null || n == null) {
            return false;
        }
 
        return p.val == n.val && judgeSame(p.left, n.right) && judgeSame(p.right, n.left);
      
    }
    
    boolean isSymmetrical(TreeNode pRoot) {
        if(pRoot == null) return true;

        TreeNode nRoot = pRoot;

        //引入辅助函数invertTree,通过翻转二叉树,生成一个镜像二叉树
        invertTree(nRoot);
        
        // 引入辅助函数judgeSame,来判断二叉树 和 镜像二叉树是否相同
        return judgeSame(pRoot, nRoot);
    }
}

 

 

如下解法,进行了一定的优化。 因为根节点不需要再进行比较,直接 递归比较根节点的左右子树即可。

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {

    boolean judgeSame(TreeNode p, TreeNode n) {
        if(p == null && n == null) {return true;}
        if(p == null || n == null) {return false;}
        return  p.val == n.val && judgeSame(p.left, n.left) && judgeSame(p.right, n.right);
    }
    
    boolean isSymmetrical(TreeNode pRoot) {
        if(pRoot == null) return true;

        // 引入辅助函数judgeSame,来判断二叉树 和 镜像二叉树是否相同
        return judgeSame(pRoot.left, pRoot.right);
    }
}

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

NBGtARh4sl8T