morris遍历详解(实现树的前中后序遍历)

morris遍历详解(实现树的前中后序遍历)

morris遍历介绍

morris遍历是二叉树遍历算法的至强算法,不同于递归,非递归(栈实现)的空间复杂度,morris遍历可以将非递归遍历中的树的深度的空间开销,降为O(1)。从而实现时间复杂度为O(n),而空间复杂度为O(1)的精妙算法。

morris遍历利用的是树的叶节点左右孩子为空,这一特性来实现空间开销的极度缩减。

morris遍历的实现原则

来到当前节点,记为cur(引用)
1、如果cur无左孩子,cur向右移动(cur = cur.right)
2、如果cur有左孩子,找到cur左子树上最右的节点,记为mostright
    (1)如果mostright的right指针指向空,让其指向cur,cur向左移动(cur = cur.left)
    (2)如果mostright的right指针指向cur,让其指向空,cur向右移动(cur = cur.right)

实现上述原则,morris遍历即实现。

morris遍历的实例流程

一个树若按层遍历的结构为{1,2,3,4,5,6,7},即该树为满二叉树,头结点值为1,左右孩子为2,3,叶节点为4,5,6,7

我们按照morris遍历来遍历该树。

1)首先cur来到头结点1,按照morris原则的第二条第一点,它存在左孩子,cur左子树上最右的节点为5,它的right指针指向空,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值