[問題] 實作BST和while(1)的用法

作者: Brothre23 (哈姆妍)   2017-12-17 12:01:22
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows 10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
小弟現在在寫學校資結的作業 因為題目需要 順便練習一下寫BST
(是說我們DS的實作超級少 整學期到現在才寫過一次程式作業
我讀的學校應該也算不錯的了 還是其實四大四中的DS上法都差不多
大家覺得這樣正常嗎@@)
目前主要有兩個疑問 一個是插入新node時用到的迴圈
我的想法主要是這樣:
先判斷大小
比較小:
左子樹沒東西->塞進去之後break
左子樹有東西->移動current到左子樹
比較大:
右子樹沒東西->塞進去之後break
右子樹有東西->移動current到右子樹
寫成code是39~61行 跑起來也沒有問題 但是這樣就要用到while(1)或是for(;;)
感覺出現無窮迴圈code就會容易爆炸XD
不知道有沒有方法可以改寫成有固定終止條件的while或是do-while
另外一個問題是如果我要幫我的BST寫destructor的話
是用類似traversal的方式走到底之後針對每個TreeNode去呼叫delete嗎
我目前想到如果是這樣 應該是要post-order?
就是最後才刪自己才不會讓下面的node都變成無法存取的狀態
問題有點多 先謝謝板友們的解答XD
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/MIIdzStc
作者: rbufghj9713 (我只是來潛水)   2017-12-17 12:31:00
if-break
作者: galic (嘎利)   2017-12-17 12:36:00
你想太多了... 你訂的終止條件不就是找到一個適當位置之後插入新的節點然後break? 那無窮迴圈會在何時發生?
作者: jerryh001   2017-12-17 13:43:00
1.現在的是對的 2.是
作者: james732 (好人超)   2017-12-17 15:32:00
不一定有作業才要有寫,你平常就可以當練習了
作者: cphe (魔鬼藏在垃圾筒裡)   2017-12-17 19:45:00
While true是很常見的用法,你如果怕進入無窮迴圈就代表code有bug,當然要避免寫錯作業少的話有些書本上面有附習題,可以做做看
作者: mmmmei (mmm煤)   2017-12-17 20:15:00
Dtor的話, https://i.imgur.com/EUbJJB1.png 可以用遞迴函數刪除左右子節點
作者: plsmaop (plsmaop)   2017-12-19 12:46:00
112DS是一下的課,而且很c嗚嗚作業看班,五到六次上下,還有期末project
作者: galic (嘎利)   2017-12-19 13:01:00
不錯了啦 116到大三了還不會寫程式 只會考試...
作者: chuegou (chuegou)   2017-12-20 08:37:00
while true+break阿

Links booklink

Contact Us: admin [ a t ] ucptt.com