中序遍历下一个结点_分析+搭建框架【学习笔记】

例二:寻找中序遍历时的下一结点

在这里插入图片描述
注意:双向箭头


给一个结点,求中序遍历时的下一个结点。

在这里插入图片描述
把输入的中序遍历从递归改成非递归。


思考

中序遍历:
先中序遍历左子树,
再遍历树根,
再中序遍历右子树。


中序遍历所看到的第一个节点
在这里插入图片描述
D是第一个节点,没有左儿子,可能有右儿子,先遍历D的右儿子,没有右儿子,回到D的父亲B。


遍历B的右子树E级所在的树,从E一直往左走
在这里插入图片描述
G的下一个结点是E(E的左子树已经访问完毕了)。


在这里插入图片描述
E的下一个结点是A(往上走2步)
在这里插入图片描述
阐述关系:
E是B的右子树:遍历完E的时候,找的下一个结点不是B。

继续往上走,走到什么时候怎么停下来?
当某个结点的左子树是它父亲,才停下来


在这里插入图片描述
A往上走不下去了,A负责的下一个结点是null,所以A是中序遍历的最后一个结点。


对搜索树做中序遍历有非常大的好处:

找一个元素就非常简单。
出来的就是有序的序列。


在这里插入图片描述
这是一棵搜索树。
这棵树的中序遍历的结果:1234567【有序序列】

发现:
任何一个结点,左子树的值都比根小,
右子树的值都比根大。


程序怎么写?先搭框架

  • 假设N之前的中序遍历是正确的,
  • 然后遍历结点N,
  • 遍历完之后,遍历下一个结点,
  • 如果能正确找到下一个结点,就能正确的遍历这棵树。
    在这里插入图片描述
    下一个结点,有3条路可走:
    左下
    右下
    往上走

什么情况向左走?
没有情况需要向左走。
中序遍历先遍历左子树,再遍历自己。
N已经遍历完了,说明N的左子树已经遍历完了。【假设】【循环不变式】

如果N存在右子树,怎么办?
访问右子树的第一个节点R

如果N没有右子树,怎么办?
往上走

往上走怎么走,走多少步?
如果N是P的左子树,返回P

如果N是P的右子树怎么办?
继续往上走

往上走之后还是上上个结点的右子树怎么办?
继续往上走,走到 它是某个结点的左子树为止,
最终的父亲就是N的下一个结点

在这里插入图片描述


下一集

中序遍历下一个结点_代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值