樹與森林的儲存 遍歷和樹與森林的轉換

2021-09-06 22:18:17 字數 1626 閱讀 4635

樹的儲存結構

雙親表示法

孩子表示法:

(a)多重鍊錶(鍊錶中每個指標指向一棵子樹的根結點);

(b)把每個跟結點的孩子結點排列起來,看成乙個線性表,且以單鏈表做儲存結構.且n個頭指標也組成乙個線性表.

孩子兄弟表示法://二叉樹表示法或二叉鍊錶表示法

以二叉鍊錶做樹的儲存結構,鍊錶中結點的兩個鏈域分別指向該結點的第乙個孩子結點和下乙個兄弟結點(fchild 和nsibling)

//

孩子兄弟表示法

typedef struct

csnode csnode, *cstree;

二叉樹和樹都可用二叉鍊錶作儲存結構,則以二叉鍊錶作為媒介可匯出樹與二叉樹之間的一一對應關係。

森林和二叉樹的轉換

由樹的二叉鍊錶表示定義知道:任何一棵和樹對應的二叉樹的右子樹必空。若將森林中第二棵樹的根結點看成第一棵樹的根結點的兄弟,如此重複……則可以匯出森林和二叉樹的對應關係。

樹和二叉樹的轉換

使用孩子兄弟表示法來轉換,土辦法:可以把有同乙個雙親結點的各個孩子結點有虛線串起來,把每層的每個結點分支從左到右除去第乙個外,其餘都剪掉,則剩餘的圖(包括虛線)就是二叉樹。詳細過程如下:

樹和森林的遍歷

只有兩種,森林得失先序和中序,樹的是先跟和後跟

樹的遍歷

先根遍歷:(二叉樹的先序遍歷)

先訪問根結點,

然後依次先根遍歷根的每棵子樹。

先根遍歷序列,對應二叉樹先序遍歷

後根遍歷:(二叉樹的中序遍歷)

後根訪問根的每棵子樹,

然後訪問根結點。

後根遍歷序列,對應二叉樹的中序遍歷

森林的遍歷:

先序1.訪問森林中第一棵樹的根結點;

2.先序遍歷第一棵樹中根結點的子樹森林;

3.先序遍歷除去第一棵樹之後剩餘的樹構成的森林.

先序遍歷序列

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

2.訪問森林中第一棵樹的根結點;  

3.中序遍歷除去第一棵樹之後剩餘的樹構成的森林.

中序遍歷序列

樹和森林的遍歷

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

樹和森林的遍歷

一 樹的遍歷 樹的結構是乙個根加上森林,而森林又是樹的集合,由此我們可以引出樹的兩種遍歷方式 這兩種遍歷方式本身也是一種遞迴定義 1 先根 先序 遍歷 即先訪問樹的根結點,然後依次先根遍歷根的每棵子樹 2 後根 後序 遍歷 即先依次後根遍歷根的每棵子樹,然後訪問根結點 3 另外還有一種層序遍歷,這種...

樹和森林的遍歷

數的結構是乙個根加上森林,而森林又是樹的集合,由此我們可以引出樹的兩種遍歷方式 這兩種遍歷方式本身也是一種遞迴定義 1 先根 先序 遍歷 即先訪問樹的根結點,然後依次先根遍歷根的每棵子樹 2 後根 後序 遍歷 即先依次後根遍歷根的每棵子樹,然後訪問根結點 3 另外還有一種層序遍歷,這種遍歷就是自上向...