题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648
思路:
(1)建立二叉树
(2)将b数组排序得到二叉树的前序遍历
(3)层序遍历二叉树
注意:二叉树前序遍历是先判断节点是否为空(这里卡了好久,竟然忘了最基本的前序遍历,真是太傻比了)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 220;
struct Node{
int l,r,data;
};
Node a[maxn];
int b[maxn],cnt,n;
vector <int> vc;
void it(int pos)
{
if(pos!=-1)
{
it(a[pos].l);
a[pos].data=b[cnt++];
it(a[pos].r);
}
}
void levelorder()
{
queue <int> q;
q.push(0);
while(!q.empty())
{
int tp=q.front();
q.pop();
vc.push_back(a[tp].data);
if(a[tp].l!=-1) q.push(a[tp].l);
if(a[tp].r!=-1) q.push(a[tp].r);
}
}
int main(void)
{
int i,n,j;
cin>>n;
for(i=0;i<n;i++) cin>>a[i].l>>a[i].r;
for(i=0;i<n;i++) cin>>b[i];
sort(b,b+n);
cnt=0;
it(0);
vc.clear();
levelorder();
//for(i=0;i<n;i++) cout<<a[i].data<<" ";
for(i=0;i<vc.size()-1;i++) printf("%d ",vc[i]);
printf("%d\n",vc[i]);
return 0;
}