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

原创 2016年08月30日 23:57:12

二叉树的遍历

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;
            }
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

二叉树的非递归后序遍历算法

转载网址:http://www.cnblogs.com/ybwang/archive/2011/10/04/lastOrderTraverse.html 前序、中序、后序的非递归遍历中,要数后序最为...

【数据结构与算法】二叉树深度遍历(非递归)

据说这个笔试面试的时候很容易考到,所以写到这里。 图示 代码实现 /** * 源码名称:TreeIteratorNoRecursion.java * 日期:2014-08-...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

二叉树的非递归后序遍历算法

typedef struct{Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过。 lastO...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)