image.png
/**
* 判斷是否是完全二叉樹(shù)
* @param node
*/
public static boolean isGoodBinaryTree(Node node){
if (node == null)
return false;
Queue<Node> queue = new LinkedList<>();
Node current = null;
queue.offer(node);
while(!queue.isEmpty()){
//出隊(duì)列元素
current = queue.poll();
if (current != null){
if (current.left != null)
queue.offer(current.left);
if (current.right != null)
queue.offer(current.right);
//1.如果當(dāng)前結(jié)點(diǎn)有右孩子茄靠,但是沒(méi)有左孩子橡伞,直接返回false
if (current.left == null && current.right !=null)
return false;
//2.如果當(dāng)前結(jié)點(diǎn)并不是左右孩子全有蓝厌,那之后的節(jié)點(diǎn)必須都為葉節(jié)點(diǎn),否則返回false
if (current.left != null && current.right == null){
if (current.left.left != null || current.left.right != null)
return false;
}
}
}
//3.遍歷過(guò)程如果不返回false,遍歷結(jié)束后返回true即可
return true;
}