二叉树非递归中序遍历

二叉树的中序遍历

为什么把中序遍历放在最前面呢,因为在非递归遍历中,这个是最简单也是最容易理解的,所以放在第一个的位置。

中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构,

那么来看到中序遍历,先访问左节点,再访问根节点,最后访问右节点,

简单来讲就是一层一层地访问,同时保存节点,遇到空节点就往上回溯

左节点为空就返回根节点,右节点为空节返回根节点的根节点(因为当你访问到右节点的时候,你肯定已经访问完了根节点,所以要返回到根节点的根节点去继续迭代)

简单地画一个三层的二叉树自己推一遍基本就懂了

二叉树的非递归前序遍历

代码如下

其实就是从左到右,从上到下地遍历整棵树

有左节点就往左下走,并用栈存访问过的节点

走到头了就返回到栈中的上一个节点

在图示中的例子中,4是第一个左下的节点,栈中此时保存的数据的顺序是1,2,4

取出栈顶元素赋值给p,并让他往右走,就是stack.pop().right,4节点的右边没有节点了,也就是他不能往右走,这个时候继续回溯,此时栈中数据1,2 。取2节点然后往右走

往右走碰到了一棵子树,就是重复上述的过程,当整个根节点为5的子树遍历完了,此时栈中只剩下1这一个节点,然后1节点继续向右走,直到遍历结束

树的遍历无非就是大树嵌套小树,其实就是把递归的方法通过迭代来实现

以上代码的优化以及附加注释版如下:

前序

中序

非递归的后序遍历

首先依旧是从最左下开始遍历,并依次保存节点

在栈不为空的条件下,获取栈顶节点,如果符合条件就可以输出数据,将上一个访问的节点设置为当前节点,然后当前节点出栈

否则向右下移动

特别注意要将node=NULL

具体的过程可以参考代码的注释

接下来要更新到线索化二叉树

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值