二叉树遍历程序
创建一棵二叉树,并对该二叉树进行三种遍历,不要含有中文的任何注释以及printf输出的内容麻烦用一个程序 别分开
二叉树的遍历有3种方式:
a
/
/
b e
/
/
c d f
(先序)先根遍历:(根左右)先访问根,再访问左子树,最后访问右子树,则可得如下的序列:abcdef
(中序)中根遍历:(左根右)先访问左子树,再访问根,最后访问右子树,则可得如下的序列:cbdaef
(后序)后根遍历:(左右根)先访问左子树,再访问右子树,最后访问根,则可得如下的序列:cdbfea
本文给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法。
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。
答:中文名数据挖掘技术技术流程信息收集数据集成数据规约遗传算法是一种仿生全局优化方法分类数据挖掘1技术流程2操作方法遗传算法粗集方法统计分析方法挖掘对象3数据挖掘软...详情>>
答:NP完全支持编程,编程模式简单,一旦有新的技术或者需求出现,可以很方便地通过微码编程进行实现详情>>