中序遍历加后序遍历确定先序遍历

Posted ccsu-kid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中序遍历加后序遍历确定先序遍历相关的知识,希望对你有一定的参考价值。

https://www.luogu.com.cn/problem/P1030

 1 #define bug(x) cout<<#x<<" is "<<x<<endl
 2 #define IO std::ios::sync_with_stdio(0)
 3 #include <bits/stdc++.h>
 4 using namespace  std;
 5 #define ll long long
 6 #define pb push_back
 7 const ll mod=1e9+7;
 8 const int N=2e5+10;
 9 
10 char s[N],t[N];
11 
12 struct node{
13     int c;
14     node *lson,*rson;
15     node(){
16         lson=NULL;
17         rson=NULL;
18     }
19 };
20 
21 int a[200],b[200],id[200],d[200],n,cnt;
22 
23 node *root;
24 
25 node* build(node *now){
26     now =new node();
27     node *rt,*lt;
28     int k=id[t[cnt]];
29     d[k]=1;
30     now->c=t[cnt--];
31     if(k<n&&!d[k+1]){
32         now->rson=build(now->rson);
33     }
34     if(k>1&&!d[k-1]){
35         now->lson=build(now->lson);
36     }
37     return now;
38 }
39 
40 void preorder(node *now){
41     printf("%c",now->c);
42     if(now->lson!=NULL)preorder(now->lson);
43     if(now->rson!=NULL)preorder(now->rson);
44 }
45 
46 void work(){
47     preorder(build(root));
48 }
49 
50 int main(){
51     scanf("%s",s+1);
52     scanf("%s",t+1);
53     cnt=n=strlen(s+1);
54 
55     for(int i=1;i<=n;i++){
56         id[s[i]]=i;
57     }
58     work();
59 }
60 /*
61 BADC
62 BDCA
63 
64 1 2 4 5 3 6
65 4 2 5 1 6 3
66 4 5 2 6 3 1
67 */

贴一个大佬说明链接

https://blog.csdn.net/qq_39627843/article/details/76168574

以上是关于中序遍历加后序遍历确定先序遍历的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——已知先序中序求后序,已知中序后序求先序

怎么根据二叉树的前序,中序,确定它的后序

通过遍历序列构造二叉树(扩展二叉树的先序先序和中序后序和中序层序和中序)附可执行完整代码

如何根据中序遍历和后序遍历求前序遍历

二叉树遍历的三种方法:先序遍历,中序遍历,后序遍历

树 知道中序遍历 层次遍历 求先序遍历