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


樹的存儲結構

   

雙親表示法

 

孩子表示法:

(a)多重鏈表(鏈表中每個指針指向一棵子樹的根結點);

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

 

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

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

//孩子兄弟表示法
typedef struct CSNode{
    int data;
    CSNode *fchild ,*nsibling;
} CSNode, *CSTree;

二叉樹和樹都可用二叉鏈表作存儲結構,則以二叉鏈表作為媒介可導出樹與二叉樹之間的一一對應關系。

森林和二叉樹的轉換

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

樹和二叉樹的轉換

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

樹和森林的遍歷

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

樹的遍歷

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

        先訪問根結點,

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

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

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

        后根訪問根的每棵子樹,

        然后訪問根結點。

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

森林的遍歷:

先序

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

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

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

先序遍歷序列

中序

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

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

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

中序遍歷序列

 

歡迎關注

 

dashuai的博客是終身學習踐行者,大廠程序員,且專注於工作經驗、學習筆記的分享和日常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM