關於二叉樹的順序儲存和鏈式儲存

2021-07-04 04:09:22 字數 1208 閱讀 5706

【出處】

3.2.2  二叉樹的順序儲存結構和鏈式儲存結構

(1)二叉樹的順序儲存結構

按照順序儲存結構的定義,用一組位址連續的儲存單元以此自上而下、自左至右儲存完全二叉樹上的結點元素,即將完全二叉樹上編號為i的結點元素儲存在如上定義的一維陣列中下標為i-1的分量中。對於一般二叉樹,則應將其每個結點與完全二叉樹上的結點相對照,儲存在一維陣列的相應分量中,空缺表示不存在此結點。由此可見,這種順序儲存結構僅適用於完全二叉樹,因為,在最壞的情況下,乙個深度為k且只有k個節點的單支樹(樹中不存在度為2的結點)卻需要長度為2k-1的一維陣列。如下圖所示:

二叉樹的順序儲存表示:

#define max_tree_size 100                             

∥二叉樹的最大結點數  

typedef

elemtype sqbitree[max_tree_size];  

∥0號單元儲存根結點  

sqbitree bt; 

(2)二叉樹的鏈式儲存結構

二叉樹的鏈式儲存結構(簡稱二叉鍊錶)是指用乙個鍊錶來儲存一棵二叉樹,二叉樹中每乙個結點用鍊錶中的乙個鏈結點來儲存。在二叉樹中,標準儲存方式的結點結構如圖所示:

其中,data表示值域,用於儲存對應的資料元素,lchild和rchild分別表示左指標域和右指標域,分別用於儲存左子女結點和右子女結點(即左、右子樹的根結點)的儲存位置(即指標)。

對應的c語言的結點型別定義如下:

typedef

struct

nodebtree; 

例如圖3-12a所示的二叉樹對應的二叉鍊錶為圖3-12b所示:

為了便於查詢任一結點的雙親結點,可以在結點中再增加乙個指標域parent,它稱為三叉鍊錶。例如上面的二叉樹的三叉鍊錶表示如圖3-13所示。

二叉樹的鏈式儲存

實現二叉樹的基本操作 建立 遍歷 計算深度 結點數 葉子數等。輸入c,先序建立二叉樹,表示空節點 輸入h 計算二叉樹的高度 輸入l 計算二叉樹的葉子個數 輸入n 計算二叉樹節點總個數 輸入1 先序遍歷二叉樹 輸入2 中序遍歷二叉樹 輸入3 後續遍歷二叉樹 輸入f 查詢值 x的節點的個數 輸入p 以縮...

二叉樹的鏈式儲存

若用鍊錶儲存一棵二叉樹時,每個結點除資料域外,還有指向左孩子和右孩子的兩個指 針。在這種儲存結構中,n個結點的二叉樹共有 個指標域,其中有 個指標域是存放了位址,有 個指標是空指標。因為有n個節點,每個節點都存了乙個lchild,乙個rchild,所以共2n個指標域。因為除了根節點,其他所有的節點都...

資料儲存 二叉樹的鏈式儲存

陣列表示法用於完全二叉樹的儲存表示非常有效,但表示一般二叉樹則不是很理想。此外,在一棵樹中進行插入和刪除操作時,為了反應結點層次的變動,可能需要移動許多的結點,這樣降低了演算法的效率,而使用了鍊錶表示可以克服這樣的缺點。根據二叉樹的定義,可以設計出二叉樹節點的構造。二叉樹的每乙個結點至少應該包括三個...