[問題] 給(前序or後序)+中序,建構為二元樹的演算

看板C_and_CPP作者 (飄婆難)時間12年前 (2013/09/04 20:39), 編輯推噓3(3013)
留言16則, 6人參與, 最新討論串1/1
目前遇到一個問題 比如說今天題目給了一顆2元樹 前序走訪:CABDEF 中序走訪:BACEDF 還原成2元樹的話應該是長這樣 C / \ A D / /\ B E F 用想的是沒問題... 但是題目要求寫出程式碼... 想請問一下 要用什麼資料結構把給前序+中序 建構成二元樹的過程 寫成演算法? 想了很久實在沒有頭緒 有知道的版友可以給個大約的方向嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.254.138.228

09/04 20:47, , 1F
把你想的邏輯轉化成演算法就好
09/04 20:47, 1F

09/04 20:56, , 2F
你能用紙筆把流程一步一步寫下來嗎?
09/04 20:56, 2F
可以呀 但是我卡在不知道要用什麼樣的資料結構先去存前序跟中序 比如說 前序第一個一定是樹根 再來去中序找到樹根 2邊就分別是左子樹跟右子樹 如此遞迴找下去 但就是有一種說不上來的沒頭緒... ※ 編輯: m6c04dk4 來自: 111.254.138.228 (09/04 21:11)

09/04 21:16, , 3F
看題目要求輸出什麼就建什麼,要樹就給樹,不用額外資料結構
09/04 21:16, 3F

09/04 21:17, , 4F
前序跟中序,題目給字串就用字串而已...
09/04 21:17, 4F

09/05 00:49, , 5F
就是不需要額外的資料結構,你的流程可能不夠仔細
09/05 00:49, 5F

09/05 14:17, , 6F
首先找出 C (頭),分成左邊右邊,接著 recursive 作
09/05 14:17, 6F

09/05 23:34, , 7F
上下兩組都要切成兩段(左子樹,右子樹)
09/05 23:34, 7F

09/05 23:37, , 8F
每次找到新的根的時候加入新點
09/05 23:37, 8F

09/05 23:44, , 9F
遞迴函數的參數是 : 前序, 後序 兩個字串
09/05 23:44, 9F

09/05 23:44, , 10F
函數運作結果 : 將子樹建出來
09/05 23:44, 10F

09/05 23:49, , 11F
建構方式:左子樹,右子樹先建完之後,串到根上
09/05 23:49, 11F

09/05 23:50, , 12F
然後回傳整顆樹。 PS: 切字串的時候用長度切
09/05 23:50, 12F

09/06 00:30, , 13F
看不懂的話就去解 UVA 536
09/06 00:30, 13F
OK 謝謝大大 ※ 編輯: m6c04dk4 來自: 111.254.116.91 (09/07 08:15)


09/15 00:16, , 15F
讓我獻醜一下,網路上面找到的Code一定都比我短(淚目
09/15 00:16, 15F

09/15 00:28, , 16F
題外話如果你打 AAAAA AAAAA 我的程式無法解決
09/15 00:28, 16F
文章代碼(AID): #1I9oe9MV (C_and_CPP)