判断一棵二叉树不是完全二叉树可以从下面两个条件判断
public class IsCBT { //层次遍历的思想判断是否是完全二叉树 public static boolean isCBT(Node head) { if (head == null) { return true; } LinkedList<Node> queue = new LinkedList<>(); //是否遇到过左右两个孩子不双全的节点 boolean leaf = false; Node l = null; //当前遍历节点的左孩子 Node r = null; //当前遍历节点的右孩子 queue.add(head); while (!queue.isEmpty()) { head = queue.poll(); l = head.left; r = head.right; if ( //遇到过不双全节点并且不是当前遍历节点叶节点 或 无左孩子有右孩子即不是完全二叉树 (leaf && (l != null || r != null)) || (l == null && r != null) ) { return false; } if (l != null) { queue.add(l); } if (r != null) { queue.add(r); } //左右孩子不双全 if (l == null || r == null) { leaf = true; } } return true; } }