当前位置 : 主页 > 编程语言 > java >

PAT甲级1099

来源:互联网 收集:自由互联 发布时间:2022-09-02
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Binary Search Tree (BST) is recursively defined as a binary tree which has the following pro


1099. Build A Binary Search Tree (30)

时间限制

100 ms

内存限制

65536 kB

代码长度限制

16000 B

判题程序

Standard

作者

CHEN, Yue

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.

  • 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 42Sample Output:58 25 82 11 38 67 45 73 42

#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn = 100;
struct node
{
int data;
int l, r;
node():l(-1),r(-1){}
}nodes[maxn];
int index = 0; vector<int> v;
void inorder(int root)
{
if (root == -1)
return;
inorder(nodes[root].l);
nodes[root].data = v[index++];
inorder(nodes[root].r);
}
void levelorder(int root)
{
queue<int> Q;
if (root != -1)
{
Q.push(root);
}
bool first = true;
while (!Q.empty())
{
int t = Q.front();
Q.pop();
if (first)
{
printf("%d", nodes[t].data); first = false;
}
else printf(" %d", nodes[t].data);
if (nodes[t].l != -1) Q.push(nodes[t].l);
if (nodes[t].r != -1) Q.push(nodes[t].r);
}
}
int main()
{
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d %d", &nodes[i].l, &nodes[i].r);
}
int t;
for (int i = 0; i < N; i++)
{
scanf("%d", &t);
v.push_back(t);
}
sort(v.begin(), v.end());
inorder(0);
levelorder(0);
return 0;
}


上一篇:Spring Boot实现一个监听用户请求的拦截器
下一篇:没有了
网友评论