原题:1099. Build A Binary Search Tree (30)
解题思路:
数量不大,可以用数组解决。题目中给出的0-N-1为一个先序遍历,BST的中序遍历实际上是数据从小到大的,所以先用中序遍历构造好BST,然后用层序遍历输出结果即可。
代码如下:
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 100 + 5;
int BST[maxn*maxn], seq[maxn];
int Structure[maxn][2]; //0为左, 1为右
void Construct(int root, int& p)
{
if(Structure[root][0] != -1) Construct(Structure[root][0], p);
BST[root] = seq[p++];
if(Structure[root][1] != -1) Construct(Structure[root][1], p);
}
int main()
{
int n;
while(scanf("%d", &n) == 1)
{
for(int i = 0; i < n; i++)
scanf("%d%d", &Structure[i][0], &Structure[i][1]);
for(int i = 0; i < n; i++) scanf("%d", &seq[i]);
sort(seq, seq+n);
int p = 0;
Construct(0, p);
printf("%d", BST[0]);
queue<int>q;
if(Structure[0][0] != -1)
q.push(Structure[0][0]);
if(Structure[0][1] != -1)
q.push(Structure[0][1]);
while(!q.empty())
{
int top = q.front();q.pop();
if(top != -1) printf(" %d", BST[top]);
if(Structure[top][0] != -1) q.push(Structure[top][0]);
if(Structure[top][1] != -1) q.push(Structure[top][1]);
}
printf("\n");
}
return 0;
}