zoukankan      html  css  js  c++  java
  • 1020. Tree Traversals (序列建树)

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

     Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

     Output Specification:

    For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

    Sample Input:

    7

    2 3 1 5 7 6 4

    1 2 3 4 5 6 7

     Sample Output:

    4 1 6 3 5 7 2

    见之前一篇日志《序列建树(递归) 》

    #include <iostream>
    
    using namespace std;
    
     
    
     
    
    struct LNode
    
    {
    
      LNode *lchild,*rchild;
    
      int data;
    
    };
    
     
    
    int in[31];
    
    int pos[31];
    
     
    
     
    
    LNode* fun(int pos[],int f1,int r1,int in[],int f2,int r2)//生成树
    
    {
    
          if(f1>r1)  return NULL;
    
         
    
          LNode *p=(LNode*)malloc(sizeof(LNode));
    
          p->lchild=NULL;
    
          p->rchild=NULL;
    
          p->data=pos[r1];
    
          int i;
    
          for(i=f2;i<=r2;i++)
    
                if(in[i]==pos[r1])  break;
    
          p->lchild=fun(pos,f1,f1+i-f2-1,in,f2,i-1);
    
          p->rchild=fun(pos,f1+i-f2,r1-1,in,i+1,r2);
    
         return p;     
    
    }
    
     
    
    int main()
    
    {
    
          int n;
    
          while(cin>>n)
    
          {
    
                int i;
    
              for(i=0;i<n;i++)
    
                      cin>>pos[i];
    
                for(i=0;i<n;i++)
    
                      cin>>in[i];
    
                LNode *q=(LNode*)malloc(sizeof(LNode));
    
            q=fun(pos,0,n-1,in,0,n-1);
    
     
    
                LNode* que[40];  //层次遍历
    
                int front=0;int rear=0;
    
                rear++;
    
                que[rear]=q;
    
            bool fir=true;
    
                while(front!=rear)
    
                {
    
                   front++;
    
                   if(fir)
    
                   {cout<<que[front]->data;fir=false;}
    
                   else cout<<" "<<que[front]->data;
    
                   if(que[front]->lchild!=NULL)
    
                     que[++rear]=que[front]->lchild;
    
                   if(que[front]->rchild!=NULL)
    
                     que[++rear]=que[front]->rchild; 
    
                }
    
                cout<<endl;
    
     
    
          }
    
       return 0;
    
    }
    
     
    
     
  • 相关阅读:
    最新闲鱼数据采集软件【2020年4月更新】
    拼多多改价精灵
    idhttp采集时遇到乱码问题解决
    拼多多店铺采集如何采集?【爬虫技术】
    【原创最新2018】淘宝如何获取别人店铺宝贝的上下架时间?
    android.support.v4.app.NotificationCompat引用包
    Delphi 7启动后提示Unable to rename delphi32.dro的解决办法
    NOIP 膜你题 DAY2
    NIOP 膜你题
    一个hin秀的小学三年级奥数题 [hin秀]
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/4255582.html
Copyright © 2011-2022 走看看