和1064题异曲同工
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int MAX = 110;
struct node{
int data;
int lchild;
int rchild;
}node[MAX];
vector<int> in,level,input;
void inorder(int root){
if(root==-1) return;
inorder(node[root].lchild);
in.push_back(root);
inorder(node[root].rchild);
}
void levelorder(int root){
int p=root;
queue<int> q;
q.push(p);
while(!q.empty()){
p=q.front();
level.push_back(p);
q.pop();
if(node[p].lchild!=-1) q.push(node[p].lchild);
if(node[p].rchild!=-1) q.push(node[p].rchild);
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d%d",&node[i].lchild,&node[i].rchild);
}
for(int i=0;i<n;i++){
int temp;
scanf("%d",&temp);
input.push_back(temp);
}
inorder(0);
levelorder(0);
sort(input.begin(),input.end());
for(int i=0;i<n;i++){
node[in[i]].data=input[i];
}
for(int i=0;i<n;i++){
if(i!=0) printf(" ");
printf("%d",node[level[i]].data);
}
return 0;
}
2701

被折叠的 条评论
为什么被折叠?



