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);
     }

  • 相关阅读:
    mysql 5.7开启sql日志的配置
    Apache显示目录列表及icons目录的问题
    WebGL学习笔记二——绘制基本图元
    java上传文件类型检测
    binlog
    vs2015下C4819该文件包含不能在当前代码页(936)中表示的字符问题解决
    WebGL学习笔记一
    vs2015 debug时出现 C2039“cout”: 不是“std”的成员
    spring boot实现切割分片上传
    springboot自定义类@Resource注入为null的问题
  • 原文地址:https://www.cnblogs.com/pbreak/p/1750850.html
Copyright © 2011-2022 走看看