PTA 二叉树的非递归遍历 PTA
·
直接上代码
非递归
void InorderTraversal(BinTree BT)
{
Stack S = CreateStack();
BinTree p = BT;
while (p != NULL || !IsEmpty(S))
{
if(p!=NULL)
{
Push(S, p);
p = p->Left;
}
else
{
p = Pop(S);
printf(" %c", p->Data);
p = p->Right;
}
}
}
void PreorderTraversal(BinTree BT)
{
Stack S = CreateStack();
BinTree p = BT;
while (p != NULL || !IsEmpty(S))
{
if(p!=NULL)
{
Push(S, p);
printf(" %c", p->Data);
p = p->Left;
}
else
{
p = Pop(S);
p = p->Right;
}
}
}
void PostorderTraversal(BinTree BT)
{
Stack S = CreateStack();
BinTree p = BT;
while (p != NULL || !IsEmpty(S))
{
if(p!=NULL)
{
//第一次进 标记为1
p->flag = 1;
Push(S, p);
p = p->Left;
}
else
{
p = Pop(S);
int f = p->flag;
if (f == 1)
{
p->flag = 2;
Push(S, p);
p = p->Right;
}
else
{
printf(" %c", p->Data);
p = NULL;
}
}
}
}
递归也能过
void InorderTraversal(BinTree BT)
{
if (!BT)
return;
InorderTraversal(BT->Left);
printf(" %c", BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal(BinTree BT)
{
if (!BT)
return;
printf(" %c", BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal(BinTree BT)
{
if(!BT)
return ;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
更多推荐
所有评论(0)