前序遍历:
//递归
void PreOrder(BiTree T)
{
if(T!=NULL)
{
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//栈
void PreOrder(BiTree T)
{
InitStack(S);
BiTree p=T;
while(p||!isEmpty(S))
{
if(p)
{
visit(p);
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
p=p->rchild;
}
}
}
中序遍历:
//递归
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
//栈
void InOrder(BiTree T)
{
InitStack(S);
BiTree p=T;
while(p||!isEmpty(S))
{
if(p)
{
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
visit(p);
p=p->rchild;
}
}
}
后序遍历:
//递归
void PostOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
InOrder(T->rchild);
visit(T);
}
}
//栈
void PostOrder(BiTree T)
{
InitStack(S);
BiTree p=T;
BiTree r=null;
while(p||!IsEmpty(S))
{
if(p)
{
push(S,p);
p=p->lchild;
}
else
{
GetTop(S,p);
if(p->rchild&&p->rchild!=r)
{
p=p->rchild;
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
visit(p->data);
r=p;
p=NULL;
}
}
}
}