一、正規(guī)二叉樹和完全二叉樹的區(qū)別
二叉樹是每個節(jié)點非常多有兩個兒子的樹。
正規(guī)二叉樹是每個節(jié)點都有兩個或沒有兒子的二叉樹。這意味著,如果一個節(jié)點有左兒子,那么它必須有右兒子,反之亦然。
完全二叉樹是一棵二叉樹,其中除了可能深度為 h 或 h-1 的最后一層外,其余各層的節(jié)點數(shù)都達(dá)到最大個數(shù),即第 i 層非常多有 2^(i-1) 個節(jié)點(i≥1)。換句話說,如果二叉樹中除去最后一層節(jié)點為滿二叉樹,且最后一層的結(jié)點依次從左到右分布,則此二叉樹被稱為完全二叉樹。
舉個例子,下面這棵樹是一棵正規(guī)二叉樹:
? 1
?/ \
2?? 3
但是,它不是一棵完全二叉樹,因為第二層的節(jié)點數(shù)不是最大的。
延伸閱讀:
二、完全二叉樹與滿二叉樹的區(qū)別是什么
含義不同:
完全二叉樹是由滿二叉樹而引出來的。對于深度為K的,有n個結(jié)點的二叉樹,當(dāng)且僅當(dāng)其每一個結(jié)點都與深度為K的滿二叉樹中編號從1至n的結(jié)點一一對應(yīng)時稱之為完全二叉樹。
表示不同:
對于滿二叉樹,除最后一層無任何子節(jié)點外,每一層上的所有結(jié)點都有兩個子結(jié)點二叉樹。而完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹是由滿二叉樹而引出來的。
對于深度為K的,有n個結(jié)點的二叉樹,當(dāng)且僅當(dāng)其每一個結(jié)點都與深度為K的滿二叉樹中編號從1至n的結(jié)點一一對應(yīng)時稱之為完全二叉樹。
判斷一棵樹是否是完全二叉樹的思路
1>如果樹為空,則直接返回錯
2>如果樹不為空:層序遍歷二叉樹
2.1>如果一個結(jié)點左右孩子都不為空,則pop該節(jié)點,將其左右孩子入隊列;
2.1>如果遇到一個結(jié)點,左孩子為空,右孩子不為空,則該樹一定不是完全二叉樹;
2.2>如果遇到一個結(jié)點,左孩子不為空,右孩子為空;或者左右孩子都為空,且則該節(jié)點之后的隊列中的結(jié)點都為葉子節(jié)點,該樹才是完全二叉樹,否則就不是完全二叉樹;