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