1. 程式人生 > 其它 >樹與森林

樹與森林

樹的儲存結構

1.雙親表示法

雙親表示法即採用一組連續的空間表示,其中根結點的雙親用-1表示。

雙親表示法的儲存結構

#define MAX_TREE_SIZE 50			//樹中最多的結點數
typedef struct{
	char data;			//資料元素
	int parent;					//雙親位置
}PTNode;

typedef struct{
	PTNode nodes[MAX_TREE_SIZE];
	int n;									//結點數
}PTree;

這種儲存結構能夠快速找到雙親的結點,可是在求結點的孩子時,須要遍歷整個樹形結構。

2.孩子表示法

種儲存方式找子結點比較容易,可是找父節點,則須要遍歷N個結點中孩子連結串列指標域所指向的N個孩子連結串列。

3.孩子兄弟表示法

以二叉連結串列做為樹的儲存結構,每一個結點包括3部份內容——結點值、指向結點第一個孩子結點的指標和指向下一個兄弟節點的指標。

最大的優點在於能夠快速的完成樹轉化為二叉樹的操做,一樣,這種結構便於尋找子結點以及兄弟結點,查詢雙親結點的時候比較麻煩,若每一個結點在增設一個parent域指向其父節點,則查詢父結點也很方便。

4.樹、森林、二叉樹的轉換

樹轉換二叉樹的規則:每一個結點左指標指向它的第一個孩子結點,右指標指向它在樹中相鄰的兄弟結點,可表示為“左孩子,右兄弟”,因為根結點沒有兄弟,因此樹轉換而得的二叉樹沒有右子樹。

樹->二叉樹

5、樹和森林的遍歷

1、樹的遍歷:

  • 1.先根遍歷:相對應為樹的先序遍歷

  • 2.後根遍歷:相對應為樹的中序遍歷

2、森林的遍歷

先序遍歷森林

  • 1)訪問森林中第一棵樹的根結點

  • 2)先序遍歷第一棵樹中的根節點的子樹森林

  • 3)先序遍歷除第一課子樹以後剩餘的樹構成森林。

中序遍歷森林

  • 1)中序遍歷森林中第一棵樹的根結點的子樹森林

  • 2)訪問第一棵樹的根結點

  • 3)中序遍歷除去第一棵樹以後剩餘的樹構成的森林