5 5樹和森林

2022-08-19 23:06:12 字數 1017 閱讀 9250

5.5.1樹的儲存結構

樹的儲存結構通常採用如下三種表示方式。

1.雙親表示法

這種儲存結構求指定結點的雙親(或祖先包括根)都是十分方便的。

但是在這種儲存表示法中,求指定結點的孩子或其他後代則可能需要遍歷整個結構。

2.孩子鍊錶法

與雙親表示法相反,孩子鍊錶表示法便於那些涉及孩子結點的操作的實現,而不適用操作parent(t,x)。

帶雙親的孩子鍊錶

1 #include 2 #include 3

4#define maxtreesize 100

5 typedef char

datatype;67

struct cnode//

孩子鍊錶結點型別8;

12 typedef struct

cnode cnode;

1314

struct

panode15;

20 typedef struct panode panode;//

指標陣列結點型別

2122

struct

ctree23;

27 typedef struct

ctree ctree;

2829

void

main()

30

3.孩子兄弟表示法

這種儲存結構的最大優點是,它和二叉樹的二叉鍊錶表示完全一樣,因此可利用二叉樹的各種演算法來實現對樹的操作。

5.5.2樹、森林與二叉樹的轉換

樹、森林到二叉樹的轉換

我們知道,樹中每個結點至多只有乙個最左邊的孩子(長子)和乙個右鄰的兄弟,按照這種關係,只要按下面的方法即可將一棵樹轉換成二叉樹:首先在所有兄弟結點之間加一道連線,然後再對每個結點保留長子的連線,去掉該結點與其他孩子的連線。由於樹根沒有兄弟,所以轉換後的二叉樹,其根結點的右子樹必為空。

將乙個森林轉換為二叉樹的方法是:先將森林中的每棵樹轉化成二叉樹,然後再將各二叉樹的根結點看作是兄弟連在一起,形成一棵

二叉樹。

樹和森林的儲存

一 樹的儲存方式 樹與二叉樹的不同之處在於,二叉樹規定了每個節點只有兩個或者兩個一下的孩子,並且兩個孩子之間有序,而樹則可以擁有多個孩子,但是各個孩子之間規定為無序。在儲存樹的時候有多種表示方法 1.雙親表示法 樹上所有的節點以及附加資訊適用乙個陣列來儲存。而陣列每個元素除了儲存樹上節點所包含的資訊...

樹和森林的遍歷

樹的遍歷 設樹t如下圖所示,結點r是根,根的子樹從左到右依次為t1,t2,tk。1 樹t的前序遍歷定義 若樹t非空,則 訪問根結點r 依次前序遍歷根r的各子樹t1,t2,tk。2 樹的後序遍歷定義 若樹t非空,則 依次後序遍歷根t的各子樹tl,t2,tk 訪問根結點r。例 對下面的 a 圖中的樹進行...

生成樹和生成森林

1 無向圖的生成樹和生成森林 對於無向連通圖,在圖的深度優先遍歷或廣度優先搜尋遍歷過程中經歷的邊的集合和 圖中的所有頂點一起構成圖的極小連通子圖,就是一顆生成樹 深度優先生成樹 廣度優先生成樹 對非連通無向圖,深度優先搜尋遍歷或廣度優先搜尋遍歷,每個連通分量中的頂點集合遍歷時走過的邊一起構成若干顆生...