二叉树三序遍历,已知其中两种求另一种

前序,中序 ——>中序

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N],b[N],sum[N];
int cnt=-1;   
string p,q;
map<char,int> mp;
vector<char> ans;
void solve(int l,int r){
   if(l<0||l>=q.size()||r<0||r>=q.size()) return ;
   if(l>r) return ;
   cnt++;//遍历前序的每一位
   char rt=p[cnt];int pt=mp[p[cnt]];
   solve(l,pt-1);
   solve(pt+1,r);
   ans.push_back(rt);
}
signed main(){
   ios::sync_with_stdio(false);
   cin.tie(0);cout.tie(0);
   while(cin>>p>>q){
      for(int i=0;i<q.size();i++){
         mp[q[i]]=i;
      }
      ans.clear();
      cnt=-1;
      solve(0,q.size()-1);
      for(auto it:ans) cout<<it;
      cout<<endl;
   }
}

 

中序,后序——>前序

题目:https://ac.nowcoder.com/acm/contest/21763/1011

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
void solve(string in,string en){
   if(in.size()>0){
   int s=in.find(en.back());
   cout<<en.back();
   solve(in.substr(0,s),en.substr(0,s));
   solve(in.substr(s+1),en.substr(s,in.size()-s-1));
   }
}
signed main(){
   ios::sync_with_stdio(false);
   cin.tie(0);cout.tie(0);
   string p,q;cin>>p>>q;
   solve(p,q);
}

 

前序,后序——>中序

题目:https://ac.nowcoder.com/acm/contest/21763/1012

class Solution {
public:
    vector<int> ans;//存储中序遍历
    void sub(int l1,int r1,int l2,int r2,vector<int>& pre,vector<int>& suf){
        if(l1==r1){//如果只有一个点,即已经是最左边的点了,存入
            ans.push_back(pre[l1]);return ;
        }
        int pt=pre[l1+1];//找到左边的一个节点
        int id=-1;
        for(int i=l2;i<=r2;i++){
            if(pt==suf[i]){ id=i;break;} 
        }
        sub(l1+1,l1+1+id-l2,l2,id,pre,suf);
        ans.push_back(pre[l1]);
        if(id+1<=r2-1) sub(l1+1+id-l2+1,r1,id+1,r2-1,pre,suf);//判断有没有右子树了
    }
    vector<int> solve(int n, vector<int>& pre, vector<int>& suf) {
        sub(0,n-1,0,n-1,pre,suf);
        return ans;
    }
};

 

posted @ 2022-08-12 14:51  HHzp  阅读(27)  评论(0)    收藏  举报