先序遍歴、中序遍歴、後続遍歴の非再帰的実現
2169 ワード
void PreOrderTraverse(BiTree T)//
{
stack Stack;
if(!T)
{
printf(" !
");
return;
}
while(T || !Stack.empty())
{
while(T)
{
Stack.push(T);
printf("%c",T->data);
T=T->lchild;
}
T=Stack.top();
Stack.pop();
T=T->rchild;
}
}
void InOrderTraverse(BiTree T)//
{
stack Stack;
if(!T)
{
printf(" !
");
return;
}
while(T || !Stack.empty())
{
while(T)
{
Stack.push(T);
T=T->lchild;
}
T=Stack.top();
Stack.pop();
printf("%c",T->data);
T=T->rchild;
}
}
void PostOrderTraverse(BiTree T)// ,
{
int flag[20];
stack Stack;
if(!T)
{
printf(" !
");
return;
}
while(T)
{
Stack.push(T);
flag[Stack.size()]=0;
T=T->lchild;
}
while(!Stack.empty())
{
T=Stack.top();
while(T->rchild && flag[Stack.size()]==0)
{
flag[Stack.size()]=1;
T=T->rchild;
while(T)
{
Stack.push(T);
flag[Stack.size()]=0;
T=T->lchild;
}
}
T=Stack.top();
printf("%c",T->data);
Stack.pop();
}
}