二叉樹的存儲表示與實現

二叉樹的順序存儲

完全二叉樹的存儲可以按照從上到下,從左到右的順序依次存儲在一維數組中。完全二叉樹的順序存儲如圖所示:

               


如果按照從上到下,從左到右的順序把非完全二叉樹也同樣的編號,將結點依次存放在一維數組中,爲了能夠正確反映二叉樹中結點之間的邏輯關係,需要在一維數組中將二叉樹中不存在的結點位置空出。

 


順序存儲對於完全二叉樹來說是比較適合的,因爲採用順序存儲能夠節省內存單元,並能夠利用公式得到每個結點的存儲位置。但是,對於非完全二叉樹來說,這種存儲方式會浪費內存空間。




二叉樹的鏈式存儲

在二叉樹中,每一個結點有一個雙親結點和兩個孩子結點。從一棵二叉樹的根結點開始,通過結點的左右孩子地址就可以找到二叉樹的每一個結點。因此二叉樹的鏈式存儲結構包括三個域:數據域,左孩子指針域和右孩子指針域。其中,數據域存放結點的值,左孩子指針域指向左孩子結點,右孩子指針域指向右孩子結點。這種鏈式存儲結構稱爲二叉樹鏈表存儲結構



如果二叉樹採用二叉鏈表存儲結構表示


有時爲了方便找到結點的雙親結點,在二叉鏈表的存儲結構中增加以指向雙親結點的指針域parent,這種存儲結構稱爲三叉鏈表結點存儲結構。


通常情況下,二叉樹採用二叉鏈表進行表示。二叉鏈表存儲結構的類型定義如下:

typedef struct Node
{
	DataType data;
	struct Node *lchild;
	struct Node *rchild;
}*Bitree,BitNode;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章