二叉樹: 判斷二叉樹是否為完全二叉樹


 

問題描述:判斷一棵二叉樹是否為完全二叉樹。

知識點:完全二叉樹是指除二叉樹的最后一層外,其他各層的節點數達到最大個數,且最后一層的葉節點從左到右連續存在,只缺右側若干節點。

 

算法實現:

class Node {

public int value;
public Node left;
public Node right;

public Node(int value) {
this.value = value;
}
}


//is complete binary tree
public static boolean isCBT(Node head) {

if(head == null) {
return true;
}

Queue<Node> queue = new LinkedList<>();
boolean leaf = false;
Node leftN = null;
Node rightN = null;
queue.offer(head);
while (!queue.isEmpty()) {

head = queue.poll();
leftN = head.left;
rightN = head.right;
if((leftN == null && rightN != null) || (leaf && (leftN != null || rightN != null))) {
return false;
}
if(leftN != null) {
queue.offer(leftN);
}
if(rightN != null) {
queue.offer(rightN);
} else {
leaf = true;//葉子節點開始標志,若為“完全二叉樹”則之后的待處理的節點都應為葉子節點
}
}

return true;
}

 

算法解析:

1.按層遍歷二叉樹,從每層的左邊向右邊依次遍歷;

2.如果當前節點有右孩子,但沒有左孩子,直接返回false;

3.如果當前節點並不是左右孩子都有,那之后的節點應都為葉節點,否則返回false;

4.設置初始標志位true, 如果遍歷結束沒有返回false,則為完全二叉樹,返回最終結果true。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM