dfs(0,7,0,7)
中序: FDBEG A CH
后序: FDGEB HC A
p=5
dfs(0,4,6,7)
dfs(0,4,5,6)
dfs(zs,p-1,hs,hs+(p-zs)-1);
dfs(p+1,ze,hs+(p-zs),he-1);
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char Z[9],H[9]; //分别表示中序 和 后序
void dfs(int zs,int ze,int hs,int he){
//4个参数zs ze hs he分别表示子树的中序和后序在原序列中的开始下标和结束下标
if(zs<ze){ //递归
int p=zs;
while(p<=ze && Z[p]!=H[he]) p++;
cout<<H[he];
dfs(zs,p-1,hs,hs+(p-zs)-1);
dfs(p+1,ze,hs+(p-zs),he-1);
return;
}
if(zs==ze) cout<<Z[zs]; //结束条件,表示叶子节点
return; //递归停止
}
int main(){
cin>>Z>>H;
dfs(0,strlen(Z)-1,0,strlen(H)-1); // 最开始是0~n-1
cout<<endl;
return 0;
}
京公网安备 11010502036488号