作者Brothre23 (哈姆妍)
看板C_and_CPP
标题[问题] 实作BST和while(1)的用法
时间Sun Dec 17 12:01:22 2017
开发平台(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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.105.64.234
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1513483286.A.751.html
1F:推 rbufghj9713: if-break 12/17 12:31
2F:→ galic: 你想太多了... 你订的终止条件不就是找到一个适当位置之後 12/17 12:36
3F:→ galic: 插入新的节点然後break? 那无穷回圈会在何时发生? 12/17 12:36
4F:推 jerryh001: 1.现在的是对的 2.是 12/17 13:43
5F:→ james732: 不一定有作业才要有写,你平常就可以当练习了 12/17 15:32
也是啦 但大学生就是没有作业或考试就懒的读书QQ
6F:推 cphe: While true是很常见的用法,你如果怕进入无穷回圈就代表code 12/17 19:45
7F:→ cphe: 有bug,当然要避免写错 12/17 19:45
8F:推 cphe: 作业少的话有些书本上面有附习题,可以做做看 12/17 19:48
谢谢cphe大跟前几楼的galic大
原来while true很常见吗XD 我就是怕会不会一般写程式是不是不建议这样的用法@@
10F:→ mmmmei: 函数删除左右子节点 12/17 20:15
好 看起来跟我想的差不多 (? 我研究一下~
※ 编辑: Brothre23 (1.162.125.240), 12/18/2017 00:44:00
11F:推 plsmaop: 112DS是一下的课,而且很c呜呜 12/19 12:46
12F:推 plsmaop: 作业看班,五到六次上下,还有期末project 12/19 12:48
13F:→ galic: 不错了啦 116到大三了还不会写程式 只会考试... 12/19 13:01
14F:推 chuegou: while true+break阿 12/20 08:37