5.5.1樹的儲存結構
樹的儲存結構通常採用如下三種表示方式。
1.雙親表示法
這種儲存結構求指定結點的雙親(或祖先包括根)都是十分方便的。
但是在這種儲存表示法中,求指定結點的孩子或其他後代則可能需要遍歷整個結構。
2.孩子鍊錶法
與雙親表示法相反,孩子鍊錶表示法便於那些涉及孩子結點的操作的實現,而不適用操作parent(t,x)。
帶雙親的孩子鍊錶
1 #include 2 #include 34#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 無向圖的生成樹和生成森林 對於無向連通圖,在圖的深度優先遍歷或廣度優先搜尋遍歷過程中經歷的邊的集合和 圖中的所有頂點一起構成圖的極小連通子圖,就是一顆生成樹 深度優先生成樹 廣度優先生成樹 對非連通無向圖,深度優先搜尋遍歷或廣度優先搜尋遍歷,每個連通分量中的頂點集合遍歷時走過的邊一起構成若干顆生...