二叉树的遍历
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;
}
}
}
}

本文详细介绍了二叉树的前序、中序和后序遍历算法,并提供了递归和非递归两种实现方式的代码示例。递归实现直观易懂,而非递归实现则利用栈来替代递归调用,适用于资源受限的环境。
993

被折叠的 条评论
为什么被折叠?



