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;
}
}