如何判斷一棵二叉樹是完全二叉樹

2021-08-16 19:14:36 字數 657 閱讀 8949

嚴蔚敏那本教材上的說法:乙個深度為k,節點個數為 2^k - 1 的二叉樹為滿二叉樹。這個概念很好理解,

就是一棵樹,深度為k,並且沒有空位。

首先對滿二叉樹按照廣度優先遍歷(從左到右)的順序進行編號。

一顆深度為k二叉樹,有n個節點,然後,也對這棵樹進行編號,如果所有的編號都和滿二叉樹對應,那麼這棵樹是完全二叉樹。

任意的乙個二叉樹,都可以補成乙個滿二叉樹。這樣中間就會有很多空洞。在廣度優先遍歷的時候,如果是滿二叉樹,或者完全二叉樹,這些空洞是在廣度優先的遍歷的末尾,所以,但我們遍歷到空洞的時候,整個二叉樹就已經遍歷完成了。而如果,是非完全二叉樹,

我們遍歷到空洞的時候,就會發現,空洞後面還有沒有遍歷到的值。這樣,只要根據是否遍歷到空洞,整個樹的遍歷是否結束來判斷是否是完全的二叉樹。

演算法如下:

[cpp] view plain copy

bool is_complete(tree *root)  

// 判斷是否還有未被訪問到的節點

while (!q.is_empty())

} return true;

}

如何判斷一棵二叉樹是完全二叉樹

嚴蔚敏那本教材上的說法 乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解,就是一棵樹,深度為k,並且沒有空位。首先對滿二叉樹按照廣度優先遍歷 從左到右 的順序進行編號。一顆深度為k二叉樹,有n個節點,然後,也對這棵樹進行編號,如果所有的編號都和滿二叉樹對應,那麼這棵樹是完全...

如何判斷一棵二叉樹是完全二叉樹 2

我們知道堆也是一棵完全二叉樹,一般是由陣列來實現的。如果父結點的index是k,那麼它的左子結點index為2k 1,右子結點的index為2k 2.乙個比較自然的想法就是,給樹的每個結點標上index,每個結點的index必須小於樹的總結點數目。實現如下.public class treenode...

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

層次遍歷乙個二叉樹,掃瞄到某個結點左孩子或右孩子為空時即停止,檢查此時佇列內所有結點是否均為葉子結點 include include define false 0 define true 1typedef int status typedef int elemtype typedef struct ...