[問題] Forest traversal或者 binary tree insertion

看板C_and_CPP (C/C++)作者 (Blue Sapphire)時間15年前 (2010/08/16 11:30), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/1
遇到的問題: 不好意思,我直接把程式作業有困惑的部分拿出來詢問 我有想過實作,遇到了真的卡住的地方才上來詢問的 先謝謝各位了 想不出如何實作Forest Traversal 我目前在學資料結構,課本只有Binary Tree Traversal詳細解說 但是目前作業需求,似乎要用Forest實作符合要求 若用Binary Tree我想了一下,似乎在Node存 Data多存一些Data 也可以達到相同效果 http://mpc.cs.nctu.edu.tw/~tshuang/dshw2.pdf 不好意思,我就直接貼作業的pdf上來給各位參考了 我必須依照作業把好幾個file_.txt檔案轉成好幾個forest 然後把這些forest依照相關性合併成一顆大forest 希望得到的正確結果: 1.我希望能想到Traversal Forest的方法 2.或者用Binary Tree實作,Insertion該Insert到何處? 1.這個方法我想很久,可是唯一想到的就只有用暴力法 要存幾個level就依照level寫迴圈去讀取 2.這是昨天Forest想不出怎麼traverse實作的部分 目前想到Binary Tree Insertion就規定要插入當 某一個node的child下方都可以相等於Forest的定義 開發平台: VC++ 有問題的code:我的Forest node定義如下:若有更好方法麻煩跟我說 struct node{ int child_count; //紀錄有幾個真正child char string_data[500]; //Data struct node* child[500]; //最多有500個child,初始NULL int level; //第幾層 }; Binary Tree的node定義如下: struct node{ char string_data[500]; struct node* leftChild; struct node* rightChild; int level; }; Binary Tree部分我會Traverse,一開始分別建立很多Binary Tree時候我都直接插入 最Left Node變成好幾個Skew Binary Tree 之後要插入東西我目前想到是找到要插入當誰的child之後,檢查在那個node之下何時會 遇到NULL,就在那邊放入要插入的sub-tree或者node 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.246.132

08/16 14:01, , 1F
作法就像你節點中的欄位 struct node* child[500];
08/16 14:01, 1F

08/16 14:03, , 2F
儲存不同樹的根節點位置, 依序去每棵樹中搜尋相關的節
08/16 14:03, 2F

08/16 14:05, , 3F
點並決定新的樹要加在哪一個節點下面, 如果沒有辦法加
08/16 14:05, 3F

08/16 14:05, , 4F
就把新的樹放在第一行說的陣列內
08/16 14:05, 4F

08/16 14:07, , 5F
當然這樣循序建樹會有缺點, 所以比較好的辦法就是把所
08/16 14:07, 5F

08/16 14:07, , 6F
有的樹都建好放陣列裡, 最後再用迴圈嘗試把任何樹加到
08/16 14:07, 6F

08/16 14:08, , 7F
其他樹下面
08/16 14:08, 7F

08/16 22:20, , 8F
先謝謝你回應 我研究一下您說的 謝謝!
08/16 22:20, 8F

08/17 20:16, , 9F
Wikipedia的Tree(graph theory)條目提到Forest就是將幾個
08/17 20:16, 9F

08/17 20:16, , 10F
tree用無向圖組織起來.所以Forest走訪要看一下graph怎麼做.
08/17 20:16, 10F

08/17 20:17, , 11F
而因為tree也是一種graph,也可以把forest的每個tree組織成
08/17 20:17, 11F

08/17 20:17, , 12F
tree,這樣是比較簡單.
08/17 20:17, 12F
文章代碼(AID): #1CQB3jvT (C_and_CPP)
文章代碼(AID): #1CQB3jvT (C_and_CPP)