世一题解!!~(带注释)~
2024-11-10 11:06:53
发布于:北京
4阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
string ss1,ss2;
//s1是中序,s2是后序
void dfs1(string s1,string s2){
//指定边界
if(s1.size() == 0) return;
//获取后序的最后一个字母s2[s2.size() - 1]作为根节点
int id = s1.find(s2[s2.size() - 1]); //储存 根节点在中序遍历时的位置
//输出根节点
cout << s1[id];
//字串:原字符串.substr(a,b) a代表开头位置的索引,b代表字串的长度
//s1[左子树]id[右子树]-----左子树的起点是:0,长度:id;右子树:起点:id + 1,长度: s1.size() - id - 1
//s2[左子树][右子树]id-----左子树的起点是:0,长度:id;右子树:起点:id,长度: s1.size() - id - 1
//递归处理左子数
dfs1(s1.substr(0,id),s2.substr(0,id));
//递归处理右子树
dfs1(s1.substr(id + 1,s1.size() - id - 1),s2.substr(id,s1.size() - id - 1));
}
int main(){
cin >> ss1 >> ss2;
dfs1(ss1,ss2);
return 0;
}
这里空空如也
有帮助,赞一个