關於tree traversal

看板C_and_CPP作者 (yanggood)時間8年前 (2017/11/18 19:23), 8年前編輯推噓9(9026)
留言35則, 10人參與, 8年前最新討論串1/2 (看更多)
preorder, inorder, postorder 這三種traversal可以很輕鬆的用recursive來完成 以往格式要求都是 1(空格)2(空格)3(空格) 這樣就印成功了 但現在要求 1(空格)2(空格)3 印出的最後一個元素後面不能接空格 想請問要如何判斷哪一個會是最後一個呢 目前只想出用大量判斷式 但這應該不是個好方法... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.214.144 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1511004231.A.759.html

11/18 19:33, 8年前 , 1F
一個比較骯髒的手法是 每個節點改成 先印空白再輸出
11/18 19:33, 1F

11/18 19:33, 8年前 , 2F
數字 然後用一個旗標變數 讓第一個節點不輸出空白
11/18 19:33, 2F

11/18 19:42, 8年前 , 3F
謝謝你的建議 可是不能改節點QQ
11/18 19:42, 3F

11/18 19:47, 8年前 , 4F
如果只是要讓介面輸出漂亮而不在乎摻雜控制字元的話
11/18 19:47, 4F

11/18 19:47, 8年前 , 5F
可以使用 puts("\b"); 來輸出 Backapace Character
11/18 19:47, 5F

11/18 19:48, 8年前 , 6F

11/18 19:50, 8年前 , 7F
不過這東西儘量少用 常常會讓 stdout parsing 錯誤
11/18 19:50, 7F

11/18 20:02, 8年前 , 8F
感覺這是作業 你會知道有多少節點嗎?
11/18 20:02, 8F
這是作業沒錯~ 會知道 我有記size

11/18 20:07, 8年前 , 9F
可以先印出空格在印出元素 因為你一定知道第一個是誰
11/18 20:07, 9F

11/18 20:07, 8年前 , 10F
所以第一個不要印空格就達成你需求了
11/18 20:07, 10F
不是只有preorder才知道第一個是誰嗎?

11/18 20:08, 8年前 , 11F
H大的我有想過 但那要在函式外(整個recursive)跑完才
11/18 20:08, 11F

11/18 20:08, 8年前 , 12F
能倒退
11/18 20:08, 12F
※ 編輯: yang20913 (1.160.214.144), 11/18/2017 20:11:03

11/18 20:10, 8年前 , 13F
H大講得不會改到節點 只有改變節點的輸出方式
11/18 20:10, 13F
對耶 不會改到節點 跟H大說聲抱歉 ※ 編輯: yang20913 (1.160.214.144), 11/18/2017 20:12:43

11/18 20:13, 8年前 , 14F
用flag紀錄有沒有print過 沒有的就是第一個
11/18 20:13, 14F

11/18 20:13, 8年前 , 15F
不慌不慌 >\\\<
11/18 20:13, 15F
用flag寫出來了 感謝!!

11/18 20:17, 8年前 , 16F
那就偷懶一點 紀錄一下你輸出幾個 最後一個不要空格就
11/18 20:17, 16F

11/18 20:17, 8年前 , 17F
11/18 20:17, 17F
這方法也行! 謝謝!! ※ 編輯: yang20913 (1.160.214.144), 11/18/2017 20:21:05

11/18 21:35, 8年前 , 18F
printf("%d %d %d", preorder, inorder, postorder);
11/18 21:35, 18F

11/18 21:35, 8年前 , 19F
這樣呢
11/18 21:35, 19F
我可能沒表達好 不是一起印哦

11/18 21:54, 8年前 , 20F
第二個念頭想到的想法是先把他們全部丟到一個字串裡
11/18 21:54, 20F

11/18 21:54, 8年前 , 21F
面,再從那個字串檢查最後一個字元是不是空白,是的
11/18 21:54, 21F

11/18 21:55, 8年前 , 22F
話就把它砍掉,不過僅限於節點數少的時候,而且很浪
11/18 21:55, 22F

11/18 21:55, 8年前 , 23F
費空間
11/18 21:55, 23F
好像也行耶 只是這樣要有一個全域的string ※ 編輯: yang20913 (1.160.214.144), 11/19/2017 00:14:13

11/19 19:47, 8年前 , 24F
我是想到用一個static bool 初始是true
11/19 19:47, 24F

11/19 19:47, 8年前 , 25F
print是"空白""值",true時只印值,
11/19 19:47, 25F

11/19 19:47, 8年前 , 26F
print後就把bool改true改false
11/19 19:47, 26F

11/19 19:49, 8年前 , 27F
和i大的說法是一樣的
11/19 19:49, 27F
就把flag改成bool 是這樣吧

11/19 21:53, 8年前 , 28F
在靠清看到一樣的題目耶XD 原PO是114 der?
11/19 21:53, 28F
對啊 但我不是CS ※ 編輯: yang20913 (101.10.97.140), 11/20/2017 01:52:39

11/20 06:55, 8年前 , 29F
我在靠清有回你你有看嗎
11/20 06:55, 29F
那不是我發的耶 不過我知道你是誰了!!

11/20 08:19, 8年前 , 30F
樓上暴露身份囉 嘻嘻
11/20 08:19, 30F
抓到~ ※ 編輯: yang20913 (101.10.97.140), 11/20/2017 09:14:15

11/20 20:27, 8年前 , 31F
C++的話節點存vector,傳vector的ref給遞迴式,最後forlo
11/20 20:27, 31F

11/20 20:27, 8年前 , 32F
op輸出vector的0到size()-2個,每輸出一個就輸出一個空
11/20 20:27, 32F

11/20 20:27, 8年前 , 33F
格,然後最後一個輸出就不用加空格
11/20 20:27, 33F

11/20 20:28, 8年前 , 34F
啊soory沒看到要在函式內
11/20 20:28, 34F

11/25 09:07, 8年前 , 35F
SQL command常常用到類似的東西 XD
11/25 09:07, 35F
文章代碼(AID): #1Q41X7TP (C_and_CPP)
文章代碼(AID): #1Q41X7TP (C_and_CPP)