题解
2025-08-30 11:22:57
发布于:北京
8阅读
0回复
0点赞
这道题需要用到二叉树的中序排列和前序排列
(此部分仅为没有学过前序排列和后序排列的同学)前序排列的顺序为 根节点→左子树→右子树(根左右) 中序排列的顺序为 左子树→根节点→右子树(左根右)
#include<bits/stdc++.h>
using namespace std;
void dfs(string s, string t){ //s表示中序,t表示前续
if(s.size() == 0){
return;
}
int id = t.find(s[0]);
dfs(s.substr(1, id), t.substr(0, id));
dfs(s.substr(id + 1, s.size() - 1 - id), t.substr(id + 1, s.size() - 1 - id));
cout <<s[0];
}
int main(){
string s;
cin >>s;
string t;
cin >>t;
dfs(s, t);
return 0;
}
代码在上面↑
(框架先不讲了,如果框架不会的话,自己回去回炉重造)
1.这道题需要用void函数(函数名随便),函数里需要定义两个字符串,分别表示中序和前序)
2.如果中序数组为空,函数结束。定义一个变量,将这个变量(id)赋值为前序中中序的第一个值的位置(这里要用到字符串方法的应用也就是函数名.find(需要查找的目标))。
3.用substr函数(这些用法我就不一一讲了,后面我会发一篇关于字符串用法的帖子)来递归截取右子树和左子树,中序中左子树的范围是1到id,前序中左子树的范围是0到id。
中序中右子树的位置是id + 1到s.size() - 1 - id,前序中右子树的位置是id + 1到s.size() - 1 - id。
4.主函数内正常输入,最后调用函数
这里空空如也
有帮助,赞一个