zoukankan      html  css  js  c++  java
  • 二叉树 遍历

    这是N年前写的代码

    void inorder(BTCHINALR *bt)
    /*中序遍历二叉树(递归算法)*/
    {

      if(bt != NULL){ 
           inorder(bt->lchild);
         printf("%c  ",bt->data);
        inorder(bt->rchild);

       }
    }
    void lastorder(BTCHINALR *bt)
    /*后序遍历二叉树(递归算法)*/

       if(bt != NULL){ 
           lastorder(bt->lchild);
         lastorder(bt->rchild);
         printf("%c  ",bt->data);
      }
    }
    void firstorder(BTCHINALR *bt)
    /*先序遍历二叉树(递归算法)*/

       if(bt != NULL){
             printf("%c  ",bt->data); 
             firstorder(bt->lchild);
           firstorder(bt->rchild);

      }
    }

    void  firstorder_notrecursive(BTCHINALR  *bt)
    /*先序遍历二叉树(非递归算法)*/
    {

        BTCHINALR  *q,  *s[20];
          int  top = 0;
          int  bool = 1;
          q = bt;
         do {while(q != NULL)
              { 

          top ++; 

          s[top] = q;

          printf("%c  ",q->data); 

          q = q->lchild;

        }
            if(top == 0)  

         bool = 0;
            else { q = s[top];
            top --;
            q = q->rchild; }
      }while(bool);

    }
    void  lastorder_notrecursive_1(BTCHINALR  *bt)
    /*后序遍历二叉树_1(非递归算法)*/
    {

      BTCHINALR  *q,  *s[20];
        int  top = 0;
          int  bool = 1;
          int  i=0;
          char data[100];
          q = bt;
         do

      {

        while(q != NULL)
              {  top ++;  s[top] = q; i++;data[i]=q->data;  q = q->rchild; }
            if(top == 0)   bool = 0;
               else { q = s[top];
            top --;
            q = q->lchild;

      }
      }while(bool);
      for(i;i>0;i--) printf("%c  ",data[i]);
    }
    void  lastorder_notrecursive_2(BTCHINALR  *bt)
    /*后序遍历二叉树_2(非递归算法)*/
    {BTCHINALR  *q, *s[20];
      int  top = 0;
      int  bool = 1;
      int bar[20];//一个节点第二次遍历无效的标记
      q = bt;
      do {while(q != NULL){ 
       top ++;  s[top]= q;bar[top]=1;q = q->lchild; }//遍历左子树
           if(top==0) bool=0;
           else { if(s[top]->lchild==NULL&&s[top]->rchild!=NULL&&bar[top]==1);//如果左子树不存在,则进行右子树遍历
           else  {q = s[top];
           top --;
        printf("%c  ",q->data);}//输出遍历结果
        if(bar[top]==2||top==0) q=NULL;//节点只能遍历一次.top为零,遍历结束
        else {q =  s[top];
              bar[top]=bar[top]+1;//标记遍历次数
                 q = q->rchild; }//右子树遍历
       
        }
      }while(bool);

    }
    void  inorder_notrecursive(BTCHINALR  *bt)
    /*中序遍历二叉树(非递归算法)*/
    {BTCHINALR  *q,  *s[20];
      int  top = 0;
      int  bool = 1;

      q = bt;
      do {while(q != NULL)
              {  top ++;  s[top] = q;   q = q->lchild; }
           if(top == 0)   bool = 0;
           else { q = s[top];
           top --;
           printf("%c  ",q->data);
           q = q->rchild; }
      }while(bool);
     }

  • 相关阅读:
    ios代码大全
    MYSQL数据库之如何在已经建立好表之后重构数据表
    关于cookie在一个页面设置但是在另外一个页面获取不到的原因
    cookie的那点事儿
    关于a标签不能调用js方法的小细节,你注意到了么?
    关于mysql预处理技术的一点小心得
    关于delete使用limit的一些注意事项
    DP1 等分连续1-N个数的划分种数
    Spring 编程式事务和声明式事务管理
    java https client信任所有证书
  • 原文地址:https://www.cnblogs.com/pbreak/p/1750850.html
Copyright © 2011-2022 走看看