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