您的位置:首页 > 编程语言

每天一段小代码——树的非递归遍历(中序)

2013-08-18 20:59 232 查看
#include<iostream>
using namespace std;
#define Stack_Initsize 100
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct SqStack{
BiTree *base,
*top;
int stacksize;
}SqStack;
void InitStack(SqStack &S)
{
S.base=(BiTree*)malloc(Stack_Initsize*sizeof(BiTree));
if(!S.base);//分配失败
S.top=S.base;
S.stacksize= Stack_Initsize;
}
bool StackEmpty(SqStack &S)
{
return S.base==S.top;
}
void push(SqStack &S,BiTree e)
{
if(S.top-S.base>=Stack_Initsize);//分配失败
*S.top++=e;
}
BiTree pop(SqStack &S,BiTree &e)
{
if(StackEmpty(S));//弹出失败
e=*--S.top;
return e;
}
//初始化树未用到
BiTree InitBiTree(BiTree &T)
{
T=(BiTree)malloc(sizeof(BiTNode));
T->lchild=T->rchild=NULL;
return T;
}
// 树的遍历创建
BiTree CreatBiTree(BiTree &T)
{
char in;
cin>>in
;
if(in=='#') T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=in;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return T;
}
//树的非递归中序遍历
void InOrderTraverse(BiTree &T)
{
BiTree p=T;
SqStack S;
InitStack(S);
while(p||!StackEmpty(S))
{
if(p)
{
push(S,p); p=p->lchild;
}
else
{
pop(S,p);cout<<p->data<<"  ";p=p->rchild;
}
}
}
int main()
{
BiTree T;
CreatBiTree(T);
InOrderTraverse(T);
system("pause");
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息