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

时间:2022-07-26
本文章向大家介绍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

通信通法:先sort排好序,然后中序插入,之后队列遍历输出,完美AC~

#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;
}