首页 > 其他 > 详细

101. 对称二叉树

时间:2021-04-03 20:26:24      阅读:26      评论:0      收藏:0      [点我收藏+]

101. 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

技术分享图片

思路

要判断是否对称,则需要判断根结点的左右子树是否对称,则分别比较两个结点的外侧和内侧。

主要分为三种情况:

  1. 当左右子树的结点有一个为空,则不对称;都为空时,则对称;
  2. 当左右子树都不为空时,左右结点的值不相等,则不对称
  3. 当左右子树均不为空时,左右结点的值相等,则向下判断下面的各自的左右子树。

代码

//1、利用递归的方法
public static boolean compare(Node left, Node right) {
        //1、左右结点是否为空的情况
        if (left == null || right == null) {
            return false;
        }
        //2、左右结点不为空 但值不相等
        else if (left.val != right.val) {
            return false;
        }
        //3、左右结点不为空,值也相等,递归判断左右结点
        boolean outside = compare(left.left, right.right);
        boolean inside = compare(left.right, right.left);
        boolean flag = outside && inside;
        return flag;
    }
//迭代的方法实现 利用容器实现
public static boolean compare2(Node left,Node right) {
        Queue<Node> queue = new ArrayDeque<>();
        queue.add(left);
        queue.add(right);

        while (queue != null) {
            Node leftNode = queue.poll();
            Node rightNode = queue.poll();
            if(leftNode==null && rightNode==null){
                continue;
            }
            if(leftNode != null || rightNode!=null || rightNode.val!= leftNode.val){
                return false;
            }
            queue.add(leftNode.left);
            queue.add(rightNode.right);
            queue.add(leftNode.right);
            queue.add(rightNode.left);
        }
        return true;
    }

101. 对称二叉树

原文:https://www.cnblogs.com/nj123/p/14614249.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!