本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法。
1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;
void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
visite(p->data);
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历
{
p=pop(s);
p=p->rchild;
}//endif
}//endwhile
}//PreOrderUnrec
2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;
void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s))
{
p=pop(s);
visite(p->data); //访问根结点
p=p->rchild; //通过下一次循环实现右子树遍历
}//endif
}//endwhile
}//InOrderUnrec
3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
Bitree ptr;
tagtype tag;
}stacknode;
typedef struct
{
stacknode Elem[maxsize];
int top;
}SqStack;
void PostOrderUnrec(Bitree t)
{
SqStack s;
stacknode x;
StackInit(s);
p=t;
do
{
while (p!=null) //遍历左子树
{
x.ptr = p;
x.tag = L; //标记为左子树
push(s,x);
p=p->lchild;
}
while (!StackEmpty(s) && s.Elem[s.top].tag==R)
{
x = pop(s);
p = x.ptr;
visite(p->data); //tag为R,表示右子树访问完毕,故访问根结点
}
if (!StackEmpty(s))
{
s.Elem[s.top].tag =R; //遍历右子树
p=s.Elem[s.top].ptr->rchild;
}
}while (!StackEmpty(s));
}//PostOrderUnrec
- 浏览: 4721649 次
- 性别:
- 来自: 济南
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 -
pdztop:
inffas32.asm(594) inffas32.asm( ...
zlib 在 Visual Studio 2005 下编译失败的解决办法 -
myangle89:
这个方法有效果,但还是绕了一大圈。另外:如果每次这样使用,会造 ...
利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效 -
lsw521314:
亲,请把用到的包贴出来好么?这版本问题搞得我头大······· ...
lucene MMAnalyzer 实现中文分词 -
guji528:
多命令执行:cmd /k reg delete "H ...
REG Command in Windows XP - Windows XP REG命令的作用和用法
相关推荐
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
### 二叉树先序、中序、后序遍历非递归算法 #### 前言 在计算机科学中,二叉树是一种常见的数据结构,它被广泛应用于各种算法和程序设计中。二叉树的遍历是理解并操作二叉树的基础,通常有三种主要的遍历方式:...
后序遍历非递归算法的实现相对复杂,需要利用栈的操作来实现。 4. 结构体的定义和使用:在C语言的实现中,结构体(struct)被用来定义树节点,其中包含了数据域(如字符型的data域)和指针域(lchild和rchild分别...
二叉树的遍历通常分为三种:前序遍历(根左右)、中序遍历(左根右)和后序遍历(左右根)。通常情况下,我们都是通过递归的方式来实现这些遍历方法,但是递归方式可能会导致大量的函数调用开销,甚至可能导致栈溢出...
本文将详细介绍二叉树的先序、中序和后序遍历,以及如何通过递归和非递归(迭代)的方式来实现这些遍历方法。 **先序遍历(Preorder Traversal)** 先序遍历的顺序是:根节点 -> 左子树 -> 右子树。递归实现时,...
### 后序遍历非递归算法 后序遍历的顺序是:左子树→右子树→根节点。这是三种遍历中最复杂的一种,因为访问顺序与栈的特性不匹配。为了实现后序遍历的非递归版本,我们可以引入额外的数据结构,如`tagtype`枚举...
三、后序遍历非递归算法 后序遍历的非递归算法使用栈来实现,算法的基本思想是:从根节点开始遍历,先遍历左子树和右子树,然后访问根节点。具体实现步骤如下: 1. 初始化栈s,push根节点入栈 2. 当栈不为空时,弹...
这里我们将详细讨论三种主要的遍历方法:先序遍历、中序遍历和后序遍历,以及如何使用递归和非递归方法实现它们。 **先序遍历** 是一种访问二叉树节点的方法,其顺序为:根节点 -> 左子树 -> 右子树。递归实现先序...
数据结构二叉树链式结构的前序遍历,中序遍历,后序遍历用递归的方法,层级遍历采用队列结构
本程序实现了三种主要的二叉树遍历方法:先序遍历、中序遍历和后序遍历。以下是关于这些遍历方法的详细解释: 1. 先序遍历(Preorder Traversal): - 访问根节点。 - 对左子树进行先序遍历。 - 对右子树进行...
二叉树先序、中序、后序三种遍历的非递归算法_此三个算法可视为标准 二叉树先序、中序、后序三种遍历的非递归算法_此三个算法可视为标准 二叉树先序、中序、后序三种遍历的非递归算法_此三个算法可视为标准
在二叉树中,我们可以根据遍历顺序分为三种主要类型:前序遍历(根-左-右),中序遍历(左-根-右)和后序遍历(左-右-根)。 **先序建立二叉树**: 先序遍历的顺序是根节点-左子树-右子树。利用这个顺序,我们可以...
### 二叉树先序、中序、后序遍历非递归实现 #### 一、引言 在计算机科学中,二叉树是一种常用的数据结构,它在算法设计、数据处理等方面有着广泛的应用。对于二叉树的操作,通常包括插入、删除、查找以及遍历等基本...
### 二叉树的非递归先序、中序、后序遍历(数据结构与算法分析) 在计算机科学领域,二叉树是一种常见的数据结构,具有广泛的应用场景。本篇文章将详细介绍如何通过非递归的方式实现二叉树的先序、中序以及后序遍历...
(1)输入字符序列,建立二叉链表 (2)中序遍历二叉树:递归 (3)中序遍历二叉树:非递归 (3)二叉树高度
数据结构中二叉树的先序遍历,中序遍历,后续遍历的递归和非递归的算法
本文将深入探讨如何在C语言环境下,构建二叉树并实现其先序、中序、后序遍历的递归与非递归算法,同时讲解如何求解树的深度。 首先,我们来理解二叉树的先序遍历。先序遍历的顺序是:根节点 -> 左子树 -> 右子树。...