判断是不是完全二叉树

package com.hzins.suanfa;

import java.util.LinkedList;
import java.util.Queue;
/**
 * 判断是不是完全二叉树
 * 层级遍历二叉树,当一个节点的右孩子是null,那么后面层级遍历的节点都是子节点
 * 
 * @author Administrator
 *
 */
public class WanquanTree {
    public static boolean isCBT(Node head){
        if(head == null){
            return true;
        }
        Queue<Node> queue = new LinkedList<Node>();
        boolean leaf = false;
        Node cur = null;
        Node l = null;
        Node r = null;
        queue.offer(head);
        while(!queue.isEmpty()){
            cur = queue.poll();
            l = cur.left;
            r = cur.right;
            //或链接两个判断
            //1.leaf状态为零,但是左孩子和右孩子不全为null 2.有右孩子,没有左孩子
            //判定不是完全二叉树
            if((leaf && (l != null || r != null)) || (l == null && r != null)){
                return false;
            }
            if(l != null){
                queue.offer(l);
            }
            if(r != null){
                queue.offer(r);
            }else{
                //后面层级遍历的节点都是子节点
                leaf = true;
            }
        }
        return true;
    }
}
原文地址:https://www.cnblogs.com/caobojia/p/6767128.html