树与森林的存储、遍历和树与森林的转换
樹的存儲結構
? ?
雙親表示法
?
孩子表示法:
(a)多重鏈表(鏈表中每個指針指向一棵子樹的根結點);
(b)把每個跟結點的孩子結點排列起來,看成一個線性表,且以單鏈表做存儲結構.且N個頭指針也組成一個線性表.
?
孩子兄弟表示法://二叉樹表示法或二叉鏈表表示法
以二叉鏈表做樹的存儲結構,鏈表中結點的兩個鏈域分別指向該結點的第一個孩子結點和下一個兄弟結點(fchild 和nsibling)
//孩子兄弟表示法 typedef struct CSNode{int data;CSNode *fchild ,*nsibling; } CSNode, *CSTree;二叉樹和樹都可用二叉鏈表作存儲結構,則以二叉鏈表作為媒介可導出樹與二叉樹之間的一一對應關系。
森林和二叉樹的轉換
由樹的二叉鏈表表示定義知道:任何一棵和樹對應的二叉樹的右子樹必空。若將森林中第二棵樹的根結點看成第一棵樹的根結點的兄弟,如此重復……則可以導出森林和二叉樹的對應關系。
樹和二叉樹的轉換
使用孩子兄弟表示法來轉換,土辦法:可以把有同一個雙親結點的各個孩子結點有虛線串起來,把每層的每個結點分支從左到右除去第一個外,其余都剪掉,則剩余的圖(包括虛線)就是二叉樹。詳細過程如下:
樹和森林的遍歷只有兩種,森林得失先序和中序,樹的是先跟和后跟
樹的遍歷
先根遍歷:(二叉樹的先序遍歷)??????? 先訪問根結點,
??????? 然后依次先根遍歷根的每棵子樹。
先根遍歷序列,對應二叉樹先序遍歷
后根遍歷:(二叉樹的中序遍歷)??????? 后根訪問根的每棵子樹,
??????? 然后訪問根結點。
后根遍歷序列,對應二叉樹的中序遍歷
森林的遍歷:
先序
? 1.訪問森林中第一棵樹的根結點;
? 2.先序遍歷第一棵樹中根結點的子樹森林;
? 3.先序遍歷除去第一棵樹之后剩余的樹構成的森林.
先序遍歷序列
中序
? 1.中序遍歷第一棵樹中根結點的子樹森林;
? 2.訪問森林中第一棵樹的根結點; ?
? 3.中序遍歷除去第一棵樹之后剩余的樹構成的森林.
中序遍歷序列
?
辛苦的勞動,轉載請注明出處,謝謝…… http://www.cnblogs.com/kubixuesheng/p/4391381.html總結
以上是生活随笔為你收集整理的树与森林的存储、遍历和树与森林的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [数据库事务与锁]详解一: 彻底理解数据
- 下一篇: 几步在Eclipse离线安装proped