关于tree traversal

楼主: yang20913 (yanggood)   2017-11-18 19:23:49
preorder, inorder, postorder
这三种traversal可以很轻松的用recursive来完成
以往格式要求都是
1(空格)2(空格)3(空格)
这样就印成功了
但现在要求
1(空格)2(空格)3
印出的最后一个元素后面不能接空格
想请问要如何判断哪一个会是最后一个呢
目前只想出用大量判断式
但这应该不是个好方法...
作者: plsmaop (plsmaop)   2017-11-20 20:27:00
C++的话节点存vector,传vector的ref给递回式,最后forloop输出vector的0到size()-2个,每输出一个就输出一个空格,然后最后一个输出就不用加空格啊soory没看到要在函式内
作者: alan23273850   2017-11-20 08:19:00
楼上暴露身份囉 嘻嘻
作者: Hazukashiine (私は幸せです)   2017-11-18 19:33:00
一个比较肮脏的手法是 每个节点改成 先印空白再输出数字 然后用一个旗标变量 让第一个节点不输出空白
楼主: yang20913 (yanggood)   2017-11-18 19:42:00
谢谢你的建议 可是不能改节点QQ
作者: Hazukashiine (私は幸せです)   2017-11-18 19:47:00
如果只是要让接口输出漂亮而不在乎掺杂控制字符的话可以使用 puts("\b"); 来输出 Backapace Characterhttps://en.wikipedia.org/wiki/Control_character不过这东西尽量少用 常常会让 stdout parsing 错误
作者: school4303 (某爬虫类)   2017-11-18 20:02:00
感觉这是作业 你会知道有多少节点吗?
作者: ilikekotomi (Young)   2017-11-18 20:07:00
可以先印出空格在印出元素 因为你一定知道第一个是谁所以第一个不要印空格就达成你需求了
楼主: yang20913 (yanggood)   2017-11-18 20:08:00
H大的我有想过 但那要在函式外(整个recursive)跑完才能倒退
作者: ilikekotomi (Young)   2017-11-18 20:10:00
H大讲得不会改到节点 只有改变节点的输出方式用flag纪录有没有print过 没有的就是第一个
作者: Hazukashiine (私は幸せです)   2017-11-18 20:13:00
不慌不慌 >\\\<
作者: school4303 (某爬虫类)   2017-11-18 20:17:00
那就偷懒一点 纪录一下你输出几个 最后一个不要空格就好
作者: stupid0319 (征女友)   2017-11-18 21:35:00
printf("%d %d %d", preorder, inorder, postorder);这样呢
作者: alan23273850   2017-11-18 21:54:00
第二个念头想到的想法是先把他们全部丢到一个字串里面,再从那个字串检查最后一个字符是不是空白,是的话就把它砍掉,不过仅限于节点数少的时候,而且很浪费空间
作者: cons (一年后)   2017-11-19 19:47:00
我是想到用一个static bool 初始是trueprint是"空白""值",true时只印值,print后就把bool改true改false和i大的说法是一样的
作者: alan23273850   2017-11-19 21:53:00
在靠清看到一样的题目耶XD 原PO是114 der?
作者: GYLin (Lynx)   2017-11-20 06:55:00
我在靠清有回你你有看吗
作者: Killercat (杀人猫™)   2017-11-25 09:07:00
SQL command常常用到类似的东西 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com