{ // 基于方法一,流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S))
{
while ( T != NULL )
{
Visit(T->data) ;
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S,T);
T = T->rchild;
}
}
}
void InOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S, T);
Visit(T->data);
T = T->rchild;
}
}
}
void PostOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T,0);
T = T->lchild;
}
while ( !StackEmpty(S) && GetTopTag(S)==1)
{
Pop(S, T);
Visit(T->data);
}
if ( !StackEmpty(S) )
{
SetTopTag(S, 1); // 设置栈顶标记
T = GetTopPointer(S); // 取栈顶保存的指针
T = T->rchild;
}
else
break;
}
}