[问题] 实作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