每天一段小代码——树的非递归遍历(中序)
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"); }