# PAT (Advanced Level) Practice 1099 Build A Binary Search Tree （30 分）

1099 Build A Binary Search Tree (30分)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

• The left subtree of a node contains only nodes with keys less than the node's key.
• The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
• Both the left and right subtrees must also be binary search trees.

Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.

### Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤100) which is the total number of nodes in the tree. The next N lines each contains the left and the right children of a node in the format left_index right_index, provided that the nodes are numbered from 0 to N−1, and 0 is always the root. If one child is missing, then −1 will represent the NULL child pointer. Finally N distinct integer keys are given in the last line.

### Output Specification:

For each test case, print in one line the level order traversal sequence of that tree. All the numbers must be separated by a space, with no extra space at the end of the line.

### Sample Input:

9
1 6
2 3
-1 -1
-1 4
5 -1
-1 -1
7 -1
-1 8
-1 -1
73 45 11 58 82 25 67 38 42

### Sample Output:

58 25 82 11 38 67 45 73 42

#include<bits/stdc++.h>
#define ll long long
#define rg register ll
using namespace std;
struct node
{
ll l,r,val;
node()
{
l=r=-1;
}
}p[105];
ll a[105],cnt;
inline void init(ll x)
{
if(x!=-1)
{
init(p[x].l);
p[x].val=a[cnt++];
init(p[x].r);
}
else return;
}
queue<ll>q;
vector<ll>ans;
int main()
{
ll n;
cin>>n;
for(rg i=0;i<n;i++)
{
cin>>p[i].l>>p[i].r;
}
for(rg i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
init(0);
q.push(0);
while(!q.empty())
{
ans.push_back(p[q.front()].val);
if(p[q.front()].l!=-1)q.push(p[q.front()].l);
if(p[q.front()].r!=-1)q.push(p[q.front()].r);
q.pop();
}
for(rg i=0;i<ans.size();i++)
{
i==ans.size()-1?cout<<ans[i]<<endl:cout<<ans[i]<<" ";
}
while(1)getchar();
return 0;
}

0 条评论

• ### 2019.8.15乘兴打Codeforces Round #569 (Div. 2)小记

Recently, on the course of algorithms and data structures, Valeriy learned how t...

• ### Codeforces Beta Round #51 C. Pie or die（博弈 思维）

Volodya and Vlad play the following game. There are k pies at the cells of n  × ...

• ### Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) B. Cards Sorting 树状数组+技巧

Vasily has a deck of cards consisting of n cards. There is an integer on each of...

• ### VS.Net 2005 Design-Time Integration

Introduction This article provides an overview of the VS.NET 2005 Design-Time I...

• ### ZOJ 3202 Second-price Auction

Time Limit: 1 Second      Memory Limit: 32768 KB

• ### 论综合 | 是什么让一个数字前端实现硅农开始学习Floorplan 的？

如题，是什么让一个数字前端实现硅农开始学习Floorplan 的？是制造工艺的进步，是实现方法学的被迫更新，是养家糊口生的本能，正可谓：头发落完终不悔，为伊消得...

• ### 鲁棒因果推理中非线性二元优化问题的求解算法（cs）

确定变量之间的因果关系是决策过程中的关键步骤。虽然因果推理需要随机实验，但由于观测数据的广泛可用性和实验的不可行性，研究人员和决策者越来越多地使用观察性研究来检...

• ### ABAP如何在调试查看EXPORT/IMPORT 内存数据

These memory IDs can be accessed in the debugger, but the option isn't accessibl...

• ### Codeforces 1291 Round #616 (Div. 2) C. Mind Control（超级详细）

You and your n−1 friends have found an array of integers a1,a2,…,an. You have de...

• ### ZOJ 3623 Battle Ships

Battle Ships Time Limit: 2 Seconds Memory Limit: 65536 KB Battle Ships is a ne...