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

二叉树的遍历

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;
            }
        }
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24980021/article/details/52374485
文章标签: 二叉树 算法 遍历
个人分类: c-c++ 数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭