爱问知识人 爱问教育 医院库

二叉树遍历程序

首页

二叉树遍历程序

创建一棵二叉树,并对该二叉树进行三种遍历,不要含有中文的任何注释以及printf输出的内容麻烦用一个程序 别分开

提交回答

全部答案

    2018-05-15 04:38:15
  •   二叉树的遍历有3种方式:
    a
    /
    /
    b e
    /
    /
    c d f
    (先序)先根遍历:(根左右)先访问根,再访问左子树,最后访问右子树,则可得如下的序列:abcdef
    (中序)中根遍历:(左根右)先访问左子树,再访问根,最后访问右子树,则可得如下的序列:cbdaef
    (后序)后根遍历:(左右根)先访问左子树,再访问右子树,最后访问根,则可得如下的序列:cdbfea
    本文给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法。
      
    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。
      

    勤***

    2018-05-15 04:38:15

类似问题

换一换
  • 其他编程语言 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 171-190
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):