二叉树的遍历
1.递归实现
void PreOrder(BiTree T)
{
if(T!=NULL)
{
printf("%d ",T->data);
PreOrder(T->lchlid);
PreOrder(T->rchlid);
}
}
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchlid);
printf("%d ",T->data);
InOrder(T->rchlid);
}
}
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchlid);
PostOrder(T->rchlid);
printf("%d ",T->data);
}
}
2.非递归实现
前序遍历
void _PreOrder(BiTree T)
{
BiTree p=T; top=-1;
Stack[++top]=p;
while(top>=0)
{
p=Stack[top--];
printf("%d ",p->data);
if(p->rchlid) Stack[++top]=p->rchlid;
if(p->lchlid) Stack[++top]=p->lchlid;
}
}
中序遍历
void _InOrder(BiTree T)
{
BiTree p=T; top=-1;
while(p||top>=0)
{
if(p)
{
Stack[++top]=p;
p=p->lchlid;
}
else
{
p=Stack[top--];
printf("%d ",p->data);
p=p->rchlid;
}
}
}
后序遍历
void _PostOrder(BiTree T)
{
BiTree p=T,r=NULL;
top=-1;
while(p||top>=0)
{
if(p)
{
Stack[++top]=p;
p=p->lchlid;
}
else
{
p=Stack[top];
if(p->rchlid&&p->rchlid!=r)
{
p=p->rchlid;
}
else
{
top--;
printf("%d ",p->data);
r=p;
p=NULL;
}
}
}
}