二叉樹 判斷一棵樹是否是完全二叉樹

2021-08-18 19:39:22 字數 851 閱讀 1250

原創 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 ...