Status InOrderTraversal(BiTree BT)
{
BiTree T = BT;
NumStack *stack = createStack();
while (T!=NULL || !isempty(stack))
{
while (T!=NULL)
{
pushStack(stack,T);
T = T->lchild;
}
if (!isempty(stack))
{
NumStackPtr node = popStack(stack);
T = node->T;
printf("%c ", T->data);
T = T->rchild;
}
}
return SUCEESS;
}
Status TraverseAfter(BiTree B)
{
BiTree T = B;
BiTree pre = NULL;
NumStack *stack = createStack();
while (T != NULL || stack->top!=NULL)
{
while (T != NULL)
{
pushStack(stack, T);
T = T->lchild;
}
NumStackPtr pop = popStack(stack);
T = pop->T;
if (T->rchild == pre || T->rchild == NULL)
{
printf("%c ",T->data);
pre = T;
T = NULL;
}
else
{
pushStack(stack, T);
T = T->rchild;
}
}
return SUCEESS;
}
void levelTraverse(BiTree B)
{
BiTree T = B;
if (B == NULL)
{
return;
}
Queue *que = QueueInit();
insertQueue(que,T);
while (que->front!=NULL)
{
BiTree node = outQueue(que);
printf("%c ",node->data);
if (node->lchild)insertQueue(que, node->lchild);
if (node->rchild)insertQueue(que, node->rchild);
}
}