• PAT:1020. Tree Traversals (25) AC


    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    using namespace std;
    
    int POST[32];      //存放后序遍历
    int IN[32];        //存放中序遍历
    int n;          //节点数
    struct node
    {
      int data;
      node* l;
      node* r;
    };
    
    node* creat(int postL,int postR,int inL,int inR)
     {
      if(postL>postR)    //表明后续已经遍历完了
        return NULL;
      node* root=(node*)calloc(1,sizeof(node));    //或者写成  node* root=new node;  而calloc会自动初始化root更方便
      root->data=POST[postR];
      root->l=NULL;
      root->r=NULL;
      int tmp=0;      //标记postR这个元素在中序遍历下的位置
      for(tmp=inL ; tmp<=inR ; ++tmp)
        if(IN[tmp]==root->data)
          break;
      int numleft=tmp-inL;  //【思维】后序遍历中,前numleft个数字都是后续根的左子树
      root->l=creat(postL, postL+numleft-1, inL, tmp-1);    //【caution】这里的下标千万注意!!!
      root->r=creat(postL+numleft , postR-1 , tmp+1 , inR);  //写这步的时候最好画图
      return root;    //返回根地址
    }
    
    void BFS(node* root)
    {
      queue<node*> q;    //创建队列
      q.push(root);
      int num=0;      //记录输出个数,控制空格数量
      while(!q.empty())
      {
        ++num;
        node* tmp=q.front();
        q.pop();
        printf("%d",tmp->data);
        if(num<n)
          printf(" ");
        if(tmp->l!=NULL)
          q.push(tmp->l);
        if(tmp->r!=NULL)
          q.push(tmp->r);
      }
    }
    
    void DFS(node* root)
    {
      if(root==NULL)
        return;
      printf("%d ",root->data);
      DFS(root->l);
      DFS(root->r);
    }
    
    int main()
    {
      scanf("%d",&n);
      for(int i=0 ; i<n ; ++i)
        scanf("%d",&POST[i]);
      for(int i=0 ; i<n ; ++i)
        scanf("%d",&IN[i]);
      node* root=creat(0,n-1,0,n-1);
    
      //DFS(root);    //先序遍历,测试建树情况
    
      BFS(root);
    
      return 0;
    }
  • 相关阅读:
    算法之递归(4) 应用
    算法之递归(1)
    [Async] [Series #1] 初识Async异步编程模型。
    CVE202142287/CVE202142278 复现
    易读文库下载器1.2版发布
    Sqlite.net 读取DateTime异常的解决方案
    QZFL 2.0.5 源代码
    Sqlite 管理工具 SQLiteDeveloper 及破解
    visio2010数据库正向工程生成数据库脚本
    什么是高内聚、低耦合?
  • 原文地址:https://www.cnblogs.com/Evence/p/4319614.html
Copyright © 2020-2023  润新知