二叉树三种遍历的非递归算法

转载 2007年09月26日 13:19:00

本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法,直接用于考研答题。

1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
    Bitree Elem[maxsize];
    int top;
}SqStack;

void PreOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    p=t;
   
    while (p!=null || !StackEmpty(s))
    {
        while (p!=null)             //遍历左子树
        {
            visite(p->data);
            push(s,p);
            p=p->lchild;      
        }//endwhile
        
        if (!StackEmpty(s))         //通过下一次循环中的内嵌while实现右子树遍历
        {
            p=pop(s);
            p=p->rchild;        
        }//endif
               
    }//endwhile
   
}//PreOrderUnrec

2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
    Bitree Elem[maxsize];
    int top;
}SqStack;

void InOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    p=t;
    while (p!=null || !StackEmpty(s))
    {
        while (p!=null)             //遍历左子树
        {
            push(s,p);
            p=p->lchild;
        }//endwhile
        
        if (!StackEmpty(s))
        {
            p=pop(s);
            visite(p->data);        //访问根结点
            p=p->rchild;            //通过下一次循环实现右子树遍历
        }//endif   
   
    }//endwhile

}//InOrderUnrec


3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
    Bitree ptr;
    tagtype tag;
}stacknode;

typedef struct
{
    stacknode Elem[maxsize];
    int top;
}SqStack;

void PostOrderUnrec(Bitree t)
{
    SqStack s;
    stacknode x;
    StackInit(s);
    p=t;
   
    do
    {
        while (p!=null)        //遍历左子树
        {
            x.ptr = p;
            x.tag = L;         //标记为左子树
            push(s,x);
            p=p->lchild;
        }
   
        while (!StackEmpty(s) && s.Elem[s.top].tag==R)  
        {
            x = pop(s);
            p = x.ptr;
            visite(p->data);   //tag为R,表示右子树访问完毕,故访问根结点      
        }
        
        if (!StackEmpty(s))
        {
            s.Elem[s.top].tag =R;     //遍历右子树
            p=s.Elem[s.top].ptr->rchild;        
        }   
    }while (!StackEmpty(s));
}//PostOrderUnrec

 

数据结构 二叉树三种遍历的非递归算法(背诵版).doc

  • 2008年12月22日 15:07
  • 3KB
  • 下载

二叉树几种遍历算法的非递归实现

二叉树遍历的非递归实现 相对于递归遍历二叉树,非递归遍历显得复杂了许多,但换来的好处是算法的时间效率有了提高。下面对于我学习非递归遍历二叉树算法的过程进行总结为了便于理解,这里以下图的二叉树为例,分析...
  • kelvinmao
  • kelvinmao
  • 2016-05-15 11:43:32
  • 5945

二叉树先序、中序、后序三种遍历的非递归算法

  • 2011年12月01日 23:25
  • 26KB
  • 下载

二叉树前序、中序、后序三种遍历的非递归算法(C语言)

  • 2010年12月29日 14:23
  • 3KB
  • 下载

二叉树三种遍历的非递归算法(背诵版)

  • 2009年04月14日 21:45
  • 23KB
  • 下载

【课本】二叉树前序、中序、后序三种遍历的非递归算法

1.先序遍历非递归算法void PreOrderUnrec(Bitree *t){ Stack s; StackInit(s); Bitree *p=t; while ...
  • sky04
  • sky04
  • 2009-09-02 10:52:00
  • 6297

二叉树的三种遍历方法(递归和非递归)(转载)

#include #include //STL #include using namespace std; class Tree { public: Tree *Left; Tre...
  • acdnjjjdjkdckjj
  • acdnjjjdjkdckjj
  • 2011-03-10 17:24:00
  • 4240

二叉树的递归和非递归方式的三种遍历

二叉树的三种遍历方式,前序遍历,中序遍历,后序遍历,中的前中后都是指的是根节点的访问顺序,这三种遍历方式的概念在这里就不多说了,太普遍了! 二叉树的建立 我们这里以前序遍历为例: 我们先定...
  • woshinannan741
  • woshinannan741
  • 2016-10-16 13:18:57
  • 2508

数据结构关于二叉树的各种算法

  • 2012年10月30日 15:46
  • 3KB
  • 下载
收藏助手
不良信息举报
您举报文章:二叉树三种遍历的非递归算法
举报原因:
原因补充:

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