莫里斯遍历详细解读

中序遍历基本思路:左子树->根节点->右子树

莫里斯遍历思路:不使用任何辅助空间,强行把一棵二叉树改成一段链表结构。

参阅文章:python3-迭代遍历(常规解法&模板解法),Morris遍历
既然是链表,则每个结点cur,都要有前驱结点prev和后继结点post。

  1. 对于有右子树的结点cur,按照中序遍历的规则,他的后继结点post就是cur右子树上最左侧的结点
  2. 对于没有右子树的结点cur,按照中序遍历的规则,他的后继结点post就是其自下而上的父节点中第一个将其作为左子树的节点。

情况2有点难理解,我们可以换种理解方式:

  1. 对于有左子树的结点cur,按照中序遍历的规则,他的前驱结点prev就是cur左子树上最右侧的结点

因此结合1和3,就能得到莫里斯中序遍历的基本步骤:(中序遍历:左——中——右)

首先遍历左子树:步骤(1)(2),自己可以随便画一棵二叉树示意

  • (1)当前结点没有左孩子,则访问当前结点cur,迭代遍历cur的右子树(cur=cur.right)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值