zoukankan      html  css  js  c++  java
  • PAT-L2-006(根据后序中序遍历建立树)

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=100;
     4 queue <int> q;
     5 int a[N];
     6 int b[N];
     7 int n;
     8 struct T {
     9     int key;
    10     int ls;
    11     int rs;
    12 };
    13 int cnt;
    14 T t[N];
    15 int dfs (int l1,int h1,int l2,int h2) {
    16     if (l1>h1) return 0;
    17     int rt=++cnt;// 保留rt 而不是直接使用cnt
    18     t[rt].key=a[h1];
    19     int p;
    20     for (int i=l2;i<=h2;i++)
    21         if (b[i]==a[h1]) {
    22             p=i;
    23             break;
    24         }
    25     t[rt].ls=dfs (l1,l1+p-l2-1,l2,p-1);//  保证区间相同
    26     t[rt].rs=dfs (l1+p-l2,h1-1,p+1,h2);
    27     return rt;
    28 }
    29 int main ()
    30 {
    31     cin>>n;
    32     for (int i=1;i<=n;i++) cin>>a[i];// 后序
    33     for (int i=1;i<=n;i++) cin>>b[i];// 中序
    34     int root =dfs (1,n,1,n);
    35     bool flag=1;
    36     q.push(root);
    37     while (!q.empty()) {
    38         int k=q.front(); q.pop();
    39         if (flag) { cout<<t[k].key; flag=0; }
    40         else      cout<<" "<<t[k].key;
    41         if (t[k].ls) q.push(t[k].ls);
    42         if (t[k].rs) q.push(t[k].rs);
    43     }
    44     cout<<endl;
    45     return 0;
    46 }
    抓住青春的尾巴。。。
  • 相关阅读:
    货币
    沙漏
    秋季学习总结
    三个老师
    介绍自己
    redis 的部分配置
    第二次博客作业
    第一次阅读作业
    shell_通配符
    shell_/dev/null,>和&
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/8574452.html
Copyright © 2011-2022 走看看