【搞定算法】Morris 遍历二叉树:前序、中序、后序

目  录:

1、Morris 遍历的基本概念

2、Morris 的前序遍历

3、Morris 的中序遍历

4、Morris 的后序遍历


其实之前的文章里已经记录了二叉树的递归/非递归遍历代码实现。但是由于 Morris 遍历可以实现最优的遍历方式,这无疑是在面试时遇到此问题非常加分的回答。

1、Morris 遍历的基本概念

Morris 遍历:时间复杂度 O(N)、额外空间复杂度 O(1),N 为二叉树的节点个数。

说明:和二叉树的遍历有关的最优解都是 Morris 遍历。

 分析:

Morris 遍历:对于有左子树的节点 current,会遍历到两次,否则只会遍历到一次。对于有左子树的节点,它会先让左子树的最右节点 mostRight 指向它,从而达到之后能从底层节点返回上层。

  • 如果 mostRight 的右指针为空,说明是第一次到达 current,然后会让它指向 current;
  • 如果 mostRight 的右指针指向 current ,说明这是第二次到达 current,current 的左子树已经遍历完了,该回到 current,开始遍历其右子树了。

具体步骤:

1、如果 current 无左子树,current 向右移动【遍历其右子树】【无左子树,current 只会经过一次】;

2、如果 current 有左子树,找到 current 左子树上最右的节点 mostRight:

2.1、若 mostRight 的右指针指向 null【说明这

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值