[问题] 请问二元树里面的递回???

楼主: hunkchen2016 (我的鸡巴女友)   2018-06-14 15:01:23
请问二元树里面走访所有的Node各本上写的和网络上写的都是下面
这样
void inorderLDR(bt ptr)
{
if(ptr==NULL) return;
inorderLDR(ptr->left_child);
printf("%c",ptr->data);
inorderLDR(ptr->right_child);
}
但是我很不能理解的是??当往左边找到最后一的Node的时候
他下面的Left和Right都是Null所以printf 最后一个Node
但是他又是怎么会到上层的Nonde????????
因为ptr->left_child 和ptr_right_child不管怎么看
都是往下面左右的找节点啊!!!这个程式码是怎么在回车
到上一层的节点??
请问有人可以帮我改成不要用递回的方式吗??
作者: Schottky (顺风相送)   2018-06-14 15:13:00
呃,你知道什么叫 function call 吗?function 最后会 return 回到 caller 啊别逃避了好好把函式呼叫和递回弄懂吧 XD
作者: Neisseria (Neisseria)   2018-06-14 15:24:00
初学递回会鬼打墙还蛮正常的 XD
作者: kobe8112 (小B)   2018-06-14 15:29:00
我比较不能理解你标点符号的用法(逃
作者: sarafciel (Cattuz)   2018-06-14 15:35:00
请好好搞懂递回跟函式流程 这是很重要的程式观念
作者: descent (“雄辩是银,沉默是金”)   2018-06-14 15:46:00
建议用 debugger 来单步追纵, 这个本来就很难懂
作者: BIGbirddy (大鸟宝盒)   2018-06-14 17:22:00
这想好了第一次的in order会把整棵left subtree都印完才会印r
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-14 17:22:00
他没有回去上一层,就这样。你画一个五节点的树 自己用纸笔跑一遍
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-15 15:30:00
改用循环网络上找就有了吧 不过你递回看不懂改写我猜你更看不懂
作者: Neisseria (Neisseria)   2018-06-15 17:42:00
二元树不用递回反而比较难写
作者: Killercat (杀人猫™)   2018-06-15 23:33:00
其实不见得,需要一个stack把每次loop的时候content记起来,除此以外应该差不多之前有拆解过一个过深的递回成loop 后来发现也还好但是递回绝对比loop直觉好懂就是...
作者: Schottky (顺风相送)   2018-06-16 01:10:00
二元树看实作方式也可以做成用loop走访却不使用stack,比如说每个节点除了往左和往右的指标外还有向上的指标讲这个只是要告诉原PO,循环反而是高级技巧
作者: sarafciel (Cattuz)   2018-06-16 08:29:00
这样讲啦 能用循环简单写的东西就不会有人用递回写反过来说 会写成递回除非是教学 不然就是它写成循环会很麻烦 所以请看懂它 如果今天你跟人合作写程式你因为看不懂递回叫他改循环 他肯改那是他佛心但更有可能的情况是他会翻白眼给你看XDD
作者: Killercat (杀人猫™)   2018-06-16 09:52:00
一般来说 递回写出来以后改循环 会比直接循环简单最难的就是叫你把循环改递回 囧所以还是先用递回写出来吧
作者: james80351   2018-06-16 13:34:00
可以拿纸笔画看看函式怎么呼叫
作者: k387259 (台湾李宏感)   2018-06-21 12:10:00
请爱用逐步执行
作者: liflguy (xxxwino)   2018-07-01 18:20:00
stack的概念,慢慢叠上去再慢慢拿下来

Links booklink

Contact Us: admin [ a t ] ucptt.com