C/C++ code//BiTree.c
#include
#include"BiTree.h"
#include
SqStack InitStack(SqStack S)
{
S=(SqStack)malloc(sizeof(struct Stack));
S->base =(struct BiTNode **)malloc(STACK_INIT_SIZE*sizeof(struct BiTNode**));
if(!S->base) exit(1);
S->top=S->base;
S->stacksize =STACK_INIT_SIZE;
return S;
}
BiTree GetTop(SqStack S)
{
BiTree e;
BiTree *p;
p=S->top;
if(S->top == S->base) return 0 ;
p=p-1;
e=*p;
return e;
}
SqStack Push(SqStack S,BiTree e)
{
if((S->top)-(S->base)>=(S->stacksize)){
S->base =(BiTree*)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(struct BiTNode**));
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*(S->top)=e;
S->top++;
return S;
}
BiTree Pop(SqStack S)
{
BiTree e;
if(S->top ==S->base) return NULL;
S->top=S->top-1;
e=*S->top;
return e;
}
int StackEmpty(SqStack S)
{
if(S==NULL||(S->base == S->top))
{
return 1;
}
else
{
return 0;
}
}
//void Print(SqStack S)
//{
// BiTree p;
// p=S->top-1;
// while(p!=S->base)
// {
// printf("%4c",*p);
// p=p-1;
// }
// printf("%4c",*S->base);
//}
BiTree *CreateBiTree(BiTree *T)//ŽŽœš¶þ²æÊ÷
{
char ch;
ch=getchar();
if(ch=='#') T=NULL;
else
{
if(!((*T)=(BiTree)malloc(sizeof(struct BiTNode)))) exit(FALUSE);
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);//ŽËŸäûÓÐÖŽÐÐ
}
//scanf("%c",&ch);
return (*T);
}
/*Status CreateBiTree(BiTree &T)//ŽŽœš¶þ²æÊ÷
{
char ch;
ch=getchar();
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTree)malloc(sizeof(struct BiTNode)))) exit(FALUSE);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);//ŽËŸäûÓÐÖŽÐÐ
}
//scanf("%c",&ch);
return OK;
}*/
Status PreOrderTraverse(BiTree T)//ÏÈÐò±éÀú
{
//µÝ¹é
//if(T)
//{
// printf("%c",T->data);
// PreOrderTraverse(T->lchild);
// PreOrderTraverse(T->rchild);
//}
//·ÇµÝ¹é
return OK;
}
Status InOrderTraveerse(BiTree T)//ÖÐÐò±éÀú
{
//µÝ¹é
//if(T)
//{
// InOrderTraveerse(T->lchild);
// printf("%c",T->data);
// InOrderTraveerse(T->rchild);
//}
//·ÇµÝ¹é
SqStack S=NULL;
S=InitStack(S);
BiTree p=NULL;
p=T;
while(p||!StackEmpty(S))
{
if(p){S=Push(S,p); p=p->lchild;}
else
{
p=Pop(S);
printf("%4c",p->data);
p=p->rchild;
}
}
return OK;
}
//
Status PostOrderTravaerse(BiTree T)//ºóÐò±éÀú
{
//µÝ¹é
//if(T)
//{
// PostOrderTravaerse(T->lchild);
// PostOrderTravaerse(T->rchild);
// printf("%c",T->data);
//}
//·ÇµÝ¹é
return OK;
}