板题求助
  • 板块题目总版
  • 楼主tder
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/12/15 21:44
  • 上次更新2023/12/15 22:24:56
查看原帖
板题求助
714254
tder楼主2023/12/15 21:44

给出一个二叉树的前序和中序遍历,求其后序遍历。

search(la, ra, x):在字符串 aa 的 [la,ra][la,ra] 下标区间中查找 xx,返回其下标。

work(la, ra, lb, ra):在前序遍历的 [la,ra][la,ra] 和中序遍历的 [lb,rb][lb,rb] 区间创建二叉树。

dfs():输出后序遍历结果。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5;
string a, b;
struct node {
	char c;
	int l, r;
} t[N]; 
int cnt;
int search(int la, int ra, char x) {
	for(int i = la; i <= ra; i++) 
		if(a[i] == x) return i;
	return -1;
}
int work(int la, int ra, int lb, int rb) {
	if(la > ra || lb > rb) return 0;
	int m = search(lb, rb, a[la]), s1 = (m - 1) - lb, s2 = rb - (m + 1);
	t[cnt++] = {a[la], work(la + 1, la + s1, lb, m - 1), work(ra - s2 + 1, ra, m + 1, rb)};
	return cnt;
}
void dfs(int x) {
	if(t[x].l) dfs(t[x].l);
	if(t[x].r) dfs(t[x].r);
	cout<<t[x].c;
}
signed main() {
	cin>>a>>b;
	work(0, a.length() - 1, 0, a.length() - 1);
	dfs(1);
	return 0;
}
2023/12/15 21:44
加载中...