101. 对称二叉树

101. 对称二叉树

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

图片

思路

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

主要分为三种情况:

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

代码

//1、利用递归的方法
public static boolean compare(Node left, Node right) {
        //左右结点是否为空的情况
         if(left == null && right == null){
              return true;
          }
        if (left == null || right == null) {
            return false;
        }
        //2、左右结点不为空 但值不相等
        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.isempty() {
            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;
    }

posted @ 2021-04-03 17:04  胡木杨  阅读(51)  评论(0)    收藏  举报