社区
数据结构与算法
帖子详情
怎么不用栈去实现二叉树的后序遍历非递归算法?
mlion521314
2008-05-12 09:17:23
怎么不用栈去实现二叉树的后序遍历非递归算法?
...全文
333
4
打赏
收藏
怎么不用栈去实现二叉树的后序遍历非递归算法?
怎么不用栈去实现二叉树的后序遍历非递归算法?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jieao111
2008-05-12
打赏
举报
回复
用栈的功能
mlion521314
2008-05-12
打赏
举报
回复
没人理我自己顶,急切寻求高手解答
tailzhou
2008-05-12
打赏
举报
回复
可以参考这个帖子
http://topic.csdn.net/u/20080320/20/c8e2b970-4cc9-4205-9701-e55c97d0d7e7.html
tg15
2008-05-12
打赏
举报
回复
完全可以用栈实现二叉树的后序遍历非递归算法.
并且,任何递归算法都可以改写为非递归的,
所以,我觉得你这问题不算是问题.
二叉树
遍历的
非递归
算法
非递归
的
算法
主要采用的是循环出栈入栈来
实现
对
二叉树
的遍历,下面是过程分析
二叉树
的
后序遍历
非递归
算法
1. 对于树的遍历我们最常用的三种遍历方法分别是前序遍历、中序遍历和
后序遍历
,使用的方法是深度优先遍历树的每一个节点,这些遍历方法都是使用递归函数来进行
实现
的,在数据量大的情况下是比较低效的,原因在于系统帮助我们调用了一个栈并且做了诸如保护现场和恢复现场等复杂的操作,才使得遍历可以使用非常简单的代码来
实现
,所以我们可以模仿系统中调用的栈自己可以来写一下栈,模仿其中的过程就可以完成对于三种遍历
算法
的...
二叉树
的中序遍历
非递归
算法
*
非递归
算法
思想: (1)设置一个栈S存放所经过的根结点(指针)信息;初始化S; (2)第一次访问到根结点并不访问,而是入栈; (3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。 (4) 当需要退栈时,如果栈为空则结束。 代码
实现
: void ...
二叉树
:
后序遍历
非递归
算法
分析:
后序遍历
是三种遍历中最难的一种,
后序遍历
的特点为左右根,并且也需要借助一个栈来完成,如图,虚线表示p,q最开始的位置,用r指向最近访问过的结点。首先从根节点开始,沿着根的左孩子,将左孩子依次进行入栈。当D入栈之后,由于D没有右孩子,所以将D出栈,此时r指向D。 D出栈之后读栈顶元素B,p指向B,发现B有右孩子,然后将右孩子E入栈。 然后判断栈顶元素E,E没有右孩子了,所以将E出栈,此时r指向E。 然后判断栈顶元素B,B的两个孩子都已经操作过了,所以B出栈,p指向A,判断栈顶元素A,A有右孩子,右孩
二叉树
遍历之
非递归
算法
在前一篇文章
二叉树
遍历递归
算法
对
二叉树
遍历的递归
算法
做了总结,这篇文章就来对
二叉树
遍历的
非递归
算法
做个汇总。还是与上一篇文章一样的顺序,一一汇总先序、中序、后序以及层序遍历的
非递归
算法
。 1、先序遍历(
非递归
算法
) 先序遍历
非递归
访问,使用栈即可
实现
。先序遍历的
非递归
访问在所有的遍历中算是最简单的了。主要思想就是先将根结点压入栈,然后根结点出栈并访问根结点,而后依次将根结点的右孩子、左
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章