对于是否是一颗完全二叉树,可以采用队列来判断,采用类似于层序遍历的方法(不同点是其左右孩子为null时,依旧入队)。

首先,来看看一个非完全二叉树的入队以及出队的顺序:

再来看看完全二叉树,其入队以及出队的顺序应该如下:

 

对比上面两图可以看出,当为一颗完全二叉树的时候,当出队列的一个节点为null,其后面所有出队列的节点全为null。

实现如下:

 public static boolean IsCompTree(Node node){
       boolean result = true;
       if(node == null) return result;
       Queue<Node> queue = new LinkedList<>();
       //插入根节点
       queue.offer(node);
        Node poll = null;
       while (!queue.isEmpty()){
           poll = queue.poll();

           if (poll == null) break;   //为了后面进一步判断,
//  节点不为null,则继续入队列
               queue.offer(poll.left);
               queue.offer(poll.right);
       }
       while (!queue.isEmpty()){
           if(queue.poll() != null) result = false;
           break;
       }
       return result;
    }

 

posted on 2020-08-02 17:53  CccccDi  阅读(195)  评论(0编辑  收藏  举报