原創 2023年07月27日 19:16:05
如何判斷乙個樹是否為完全二叉樹?
思路一:將所有的結點全部押入佇列中,空也壓入,每次判斷佇列的頭如果佇列頭為空了則跳出迴圈,如果此後佇列中還有元素則不是完全二叉樹。
bool iscompletetree(binarytreenode *proot)
q.pop();//把空pop出來
//因為以經有乙個空了,所以只要頭不為空就不是完全二叉樹
while(! q.empty())
return
true;
}
思路二:按照層序遍歷二叉樹,找到第乙個只有非滿結點(這個節點只有兩種情況,孩子為空或者只有左沒有右),如果之後的節點還有非滿結點,則不是。
bool iscompletetree(binarytreenode* proot)
else
else
if(pcur -> left ==
null
&& pcur -> right !=
null)
return
false;
else
if(pcur -> left !=
null
&& pcur -> right ==
null)
else
flag =
true;
}
}return
true;
}
判斷一棵樹是否是完全二叉樹
1 基礎知識 二叉樹 二叉樹是一棵特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子和右孩子。滿二叉樹 高度為n的滿二叉樹有2 n 1個節點的二叉樹。完全二叉樹 若設二叉樹的深度為h,除第h 層外,其它各層 1 h 1 的結點數都達到最大個數,第h 層所有的結點都連續集中在最左邊,這就是完全...
判斷一棵樹是否是完全二叉樹
一邊對二叉樹進行bfs將每乙個節點都加入到佇列,一邊執行下面的判斷 當前節點有右孩子,但沒有左孩子,直接返回false 當前節點有左孩子沒右孩子 或者 當前結點左孩子右孩子都沒有,那麼接下來遇到的所有節點必須是葉子節點 public static boolean check node head if...
判斷一棵二叉樹是否是完全二叉樹
層次遍歷乙個二叉樹,掃瞄到某個結點左孩子或右孩子為空時即停止,檢查此時佇列內所有結點是否均為葉子結點 include include define false 0 define true 1typedef int status typedef int elemtype typedef struct ...