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

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

相关文章推荐

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

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

二叉树的遍历(非递归)

  • 2014年05月14日 14:39
  • 4KB
  • 下载

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

typedef struct{Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过。 lastO...
  • xtu123
  • xtu123
  • 2013年07月06日 00:04
  • 291

C++ 二叉树的遍历递归、非递归

  • 2010年09月28日 21:13
  • 2KB
  • 下载

二叉树的非递归后序遍历算法实例详解

前序、中序、后序的非递归遍历中,要数后序最为麻烦,如果只在栈中保留指向结点的指针,那是不够的,必须有一些额外的信息存放在栈中。 方法有很多,这里只举一种,先定义栈结点的数据结构  代码如下: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树的遍历算法(递归和非递归)
举报原因:
原因补充:

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