您的位置:首页 > 其它

二叉树的遍历算法(递归和非递归)

2016-08-30 23:57 218 查看

二叉树的遍历

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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 算法 遍历