二叉树遍历非递归实现
来源:互联网 发布:网络名称大全 编辑:程序博客网 时间:2024/04/30 17:58
【版权声明:转载请保留出处:blog.csdn.net/algorithm_only。邮箱:liuy0711@foxmail.com】
遍历是二叉树各种操作的基础,上一节给出的遍历算法是递归实现的,本节给出二叉树遍历的非递归实现,非递归实现需要使用前面讲到的数据结构——栈、队列来作为辅助空间。
- 先序遍历
- int preorder_traverse(bitree bt, int (*visit)(elemtype e))
- {
- sqstack s;
- bitree p;
- init_stack(&s);
- p = bt;
- while (p || !is_stack_empty(s)) {
- while (p) { /* 左结点依次进栈,向左走到尽头 */
- visit(p->data);
- push_stack(&s, p);
- p = p->lchild;
- }
- if (!is_stack_empty(s)) {
- pop_stack(&s, &p); /* 出栈 */
- p = p->rchild;
- }
- }
- return OK;
- }
- 中序遍历
- int inorder_traverse(bitree bt, int (*visit)(elemtype e))
- {
- sqstack s;
- bitree p;
- init_stack(&s);
- p = bt;
- while (p || !is_stack_empty(s)) {
- while (p) {
- push_stack(&s, p);
- p = p->lchild;
- }
- if (!is_stack_empty(s)) {
- pop_stack(&s, &p);
- visit(p->data);
- p = p->rchild;
- }
- }
- return OK;
- }
- 后序遍历
- int postorder_traverse(bitree bt, int (*visit)(elemtype e))
- {
- sqstack s;
- bitree p, q;
- init_stack(&s);
- p = bt;
- q = NULL;
- while (p || !is_stack_empty(s)) {
- while (p) {
- push_stack(&s, p);
- p = p->lchild;
- }
- if (!is_stack_empty(s)) {
- get_top(s, &p); /* 取栈顶元素 */
- if (!p->rchild || p->rchild == q) { /* 如果p没有右孩子,或右孩子已经访问过 */
- visit(p->data);
- q = p;
- p = NULL;
- --s.top;/* 退栈 */
- }
- else
- p = p->rchild;
- }
- }
- return OK;
- }
- 层次遍历
- int levelorder_traverse(bitree bt, int (*visit)(elemtype e))
- {
- sqqueue sq;
- bitree cur;
- init_queue(&sq);
- if (bt) {
- in_queue(&sq, bt);
- while (!is_queue_empty(sq)) {
- out_queue(&sq, &cur);
- visit(cur->data);
- if (cur->lchild)
- in_queue(&sq, cur->lchild);
- if (cur->rchild)
- in_queue(&sq, cur->rchild);
- }
- }
- return OK;
- }
- 总结
遍历二叉树算法基本操作是访问结点,不论按哪一种次序进行遍历,对含n个结点的二叉树时间复杂度都为O(n)。
- 算法实现源码
免费下载:http://download.csdn.net/detail/algorithm_only/3800074
0 0
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历 非递归 C++实现
- 非递归实现二叉树的遍历
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历之非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历--非递归实现
- leetcode 二叉树遍历非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- Tachyon:吞吐量超过HDFS 300多倍 来自伯克利的分布式文件系统
- 正统贪心问题!!!!
- openstack周期性任务分析
- java--交通灯管理系统
- POJ 2785 4 Values whose Sum is 0 hash
- 二叉树遍历非递归实现
- 如何进行调研
- 迟来的处女作
- Hadoop 2.x.0集群安装与配置
- Winform 简单实现关机背景变灰效果的对话框
- 我写过的软件之TSE-背景介绍
- Tilemill + tilestream + mapbox.js 自制地图
- android adb shell 获取root权限
- python classs的一些知识