先序遍历:
void preordertraverse(bitree t)
{
bitree stack[maxsize];
int top;
bitnode *p;
top=0;
p=t;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
printf("%c",p->data);
stack[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=stack[--top];
p=p->lchild;
}
}
}
中序遍历:
void inordertraverse(bitree t)
{
bitree stack[maxsize];
int top;
bitnode *p;
top=0;
p=t;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
stack[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=stack[--top];
printf("%c",p->data);
p=p->rchild;
}
}
}
后序遍历:
void postordertraverse(bitree t)
{
bitree stack[maxsize];
int top;
bitnode *p,*q;
top=0;
p=t;q=NULL;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
stack[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=stack[--top];
if(p->rchild==NULL||p->rchild==q)
{
printf("%c",p->data);
q=p;
p=NULL;
top--;
}
else
p=p->lchild;
}
}
}