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

预处理每个节点左子树有多少个点。

然后确定值得时候递归下去就可以了。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;

struct Node
{
    int val;
    int left;
    int right;
    int numL,numR;
}s[200];
int n,a[200];
vector<int>ans;

void dfs(int x)
{
    if(s[x].left!=-1)
    {
        dfs(s[x].left);
        s[x].numL=s[s[x].left].numL+s[s[x].left].numR+1;
    }

    if(s[x].right!=-1)
    {
        dfs(s[x].right);
        s[x].numR=s[s[x].right].numL+s[s[x].right].numR+1;
    }
}

void Find(int x,int L,int R)
{
    s[x].val=a[L+s[x].numL];
    if(s[x].left!=-1) Find(s[x].left,L,L+s[x].numL-1);
    if(s[x].right!=-1) Find(s[x].right,L+s[x].numL+1,R);
}

void bfs()
{
    queue<int>q;
    q.push(0);
    while(!q.empty())
    {
        int h=q.front(); q.pop();
        ans.push_back(s[h].val);
        if(s[h].left!=-1) q.push(s[h].left);
        if(s[h].right!=-1) q.push(s[h].right);
    }

}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d%d",&s[i].left,&s[i].right);
        s[i].numL=s[i].numR=0;
    }
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    dfs(0);
    Find(0,1,n);
    bfs();
    for(int i=0;i<ans.size();i++)
    {
        printf("%d",ans[i]);
        if(i<ans.size()-1) printf(" ");
        else printf("\n");
    }
    return 0;
}
时间: 2024-10-10 02:45:35

PAT (Advanced Level) 1099. Build A Binary Search Tree (30)的相关文章

【PAT甲级】1099 Build A Binary Search Tree (30 分)

题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: 1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 pair<int,int>a[107]; 5 int b[107]; 6 int cnt=0; 7 int ans[107]

1099. Build A Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

题目信息 1099. Build A Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B 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

PAT 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 nod

PAT Advanced 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 greate

PAT Advanced 1099 Build A Binary Search Tree (30) [?叉查找树BST]

题目 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 gre

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 greate

PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历

题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子.中序遍历的顺序正好是序列从小到大的顺序,因此中序遍历的时候顺便赋值就可以了,最后层次遍历输出. 思路一:中序遍历的时候赋值 #include <iostream> #include <cstdio> #include <algorithm> #include <str

pat1099. Build A Binary Search Tree (30)

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

PAT 甲级 1099 Build A Binary Search Tree

https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648 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 th