1. 程式人生 > >二叉樹的儲存表示與實現

二叉樹的儲存表示與實現

二叉樹的順序儲存

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

               

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

 


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

二叉樹的鏈式儲存

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


如果二叉樹採用二叉連結串列儲存結構表示


有時為了方便找到結點的雙親結點,在二叉連結串列的儲存結構中增加以指向雙親結點的指標域parent,這種儲存結構稱為三叉連結串列結點儲存結構。


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

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