后序+中序序列构造二叉树
样例:">输入样例:
第一行输入序列长度n,第二行输入n个字符表示二叉树后序遍历的序列,第三行输入n个字符表示二叉树中序遍历的序列
9
GHDBEIFCA
GDHBAECIF
输出样例:
输出二叉树先序遍历的序列。
ABDGHCEFI
代码:
#include<iostream>
using namespace std;
void make_a(char *c,char *b,int n){
if(n == 0) return;
char x = c[n-1];
int i;
for(i=0;i<n;i++)
if(b[i] == x) break;
cout << x;
make_a(c,b,i);
make_a(c+i,b+i+1,n-i-1); // 后缀是从c+i开始,是因为后缀删除的根节点是最后一个节点,并不是第i个节点,所以后缀时仍要用第i个节点,但是不需要用最后一个节点
// 中缀要把第i个结点删除,所以中缀表达式是从i+1个元素开始的;(即后缀每次删最后元素,中缀删掉是中间元素)
}
int main(){
int N;
cin >> N;
char b[N],c[N]; // b->中缀 c->后缀
int n = N;
for(int i=0;i<n;i++)
cin >> c[i];
for(int i=0;i<n;i++)
cin >> b[i];
make_a(c,b,n);
return 0;
}
// https://blog.csdn.net/weixin_51942493/article/details/120835212