还是中序遍历建树
#include<bits/stdc++.h> using namespace std; const int N=110; struct node { int data; int L,R; }s[N]; int in[N]; int cnt=0; void inorder(int root) { if(root==-1) return; inorder(s[root].L); s[root].data=in[cnt++]; inorder(s[root].R); } vector<int>vec; void bfs() { queue<int>Q; Q.push(0); while(!Q.empty()){ int u=Q.front(); Q.pop(); vec.push_back(s[u].data); if(s[u].L!=-1) Q.push(s[u].L); if(s[u].R!=-1) Q.push(s[u].R); } } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++){ int a,b; scanf("%d %d",&a,&b); s[i].L=a; s[i].R=b; } for(int i=0;i<n;i++){ scanf("%d",&in[i]); } sort(in,in+n); inorder(0); bfs(); for(int i=0;i<n;i++){ if(i) printf(" "); printf("%d",vec[i]); } return 0; }