给定二叉树的具体结构以及一系列不同的整数,只有一种方法可以将这些数填充到树中,以使结果树满足 BST 的定义。
一次DFS(中序)把数值放到二叉搜索树中,再BFS(层序)输出一次即可
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define INF 0x3f3f3f3f
#define x first
#define y second
using namespace std;
const int N=233;
int n,m;
int a[N],b[N];
pair<int,int>node[N];
vector<int>ans;
void bfs(int root){
queue<int>q;
q.push(root);
while(!q.empty()){
int p=q.front();
q.pop();
ans.push_back(b[p]);
if(node[p].x!=-1) q.push(node[p].x);
if(node[p].y!=-1) q.push(node[p].y);
}
rep(i,0,ans.size())
printf("%d%c",ans[i],i==ans.size()-1?'\n':' ');
}
int cnt=0;
void dfs(int root){
if(node[root].x!=-1)dfs(node[root].x);
b[root]=a[cnt++];
if(node[root].y!=-1)dfs(node[root].y);
}
int main(){
cin>>n;
rep(i,0,n) cin>>node[i].x>>node[i].y;
rep(i,0,n) cin>>a[i];
sort(a,a+n);
dfs(0);
bfs(0);
return 0;
}