二叉树先序中序后序遍历的非递归实现
来源:互联网 发布:学笛子的软件 编辑:程序博客网 时间:2024/05/22 00:02
遍历二叉树的递归程序:
void Traverse(BiTree T){
}
可以看到三种遍历方法的递归实现形式完全一样,只需改变visit的位置,就得到不同遍历序列。因此从情感上觉得非递归实现应该形式也完全一样,这是课本给的中序非递归实现:
void InOrderTraverse(BiTree T, status(* visit)(TElemTypee)){
}
只需将visit(p->da
由于复习时间很紧张,对于这个问题基本都是零零散散的,走路蹲点发呆无聊的时候,漫无边际地胡思乱想~直到今天蹲点的时候,想明白了。
课本的非递归实现对栈的使用并不和递归栈相同,因此结点的进出栈顺序也和递归栈明显不同,基于这个道理,写了一个完全仿照递归栈工作的非递归实现,关键是出栈的条件发生了变化,而且从直觉上,这个程序的出栈和进栈语句(Push,Pop),赋值左孩子和右孩子(p=p->lchild或rchild)都应只出现一次,如果出现了多次,应该是功能重复了,可以再进行缩减。
程序如下:
status Traverse(BiTree T, status(* visit)(TElemType e)){
}
在这种形式下,只需改变visit的位置就能得到三种遍历的非递归实现,结点的进出栈顺序完全和递归栈一样,判断结点是否出栈的条件是:上一次出栈的结点是栈顶元素的右孩子。
对几棵二叉树进行了试验,结果是对的,但不知道有没有疏忽的地方。
- 二叉树先序中序后序遍历的非递归实现
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树中序遍历的非递归实现
- 非递归遍历二叉树的实现
- 二叉树遍历的非递归实现
- 二叉树后序遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树先序中序后序遍历的非递归实现A
- 二叉树的遍历(递归实现+非递归实现)
- Object—C编程详解(四)-协议(protocol)
- crm2013更改背景
- 黑马程序员_线程知识总结
- Calculate S(n)
- redhat linux 安装 gcc编译器
- 二叉树先序中序后序遍历的非递归实现
- 去IOE技术架构变革的名词解释
- 解压缩命令大全
- Android AsyncTask异步任务
- 为什么要"去IOE"
- ArbotiX-M Robocontroller Getting Started Guide
- android中绘画锚点控制(仿J2me)
- Linux/Ubuntu下Sublime Text的安装配置 以及 使用Fcitx中文输入
- WebService到底是什么?