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

来源:互联网 发布:js 变量的长度 编辑:程序博客网 时间:2024/06/05 18:33

题目:https://www.patest.cn/contests/pat-a-practise/1099

题意:给出二叉搜索树上点之间的关系,即每个点从0到n-1编号,给出的它的两个子节点,没有用-1表示。然后给出数量等于二叉树点数的数,把这些数正确的放到给定的二叉搜索树上,按层次遍历输出二叉搜索树

思路:已知二叉搜索树的中序遍历就是一个从小到大的序列,于是可以把给的数从小到大排序,然后中序遍历二叉树,遍历到每个点时赋值即可。最后层次输出就好了

#include <bits/stdc++.h>using namespace std;const int N = 110;struct node{    int l, r, v;}g[N];int arr[N];int res[N], k;void dfs1(int v, int &cnt) //中序遍历赋值{    if(v != -1)    {        dfs1(g[v].l, cnt);        g[v].v = arr[cnt++];        dfs1(g[v].r, cnt);    }}void bfs(int v) //层次遍历{    queue<int> que;    que.push(v);    while(! que.empty())    {        int v = que.front(); que.pop();        res[k++] = g[v].v;        if(g[v].l != -1) que.push(g[v].l);        if(g[v].r != -1) que.push(g[v].r);    }}int main(){    int n, a, b;    scanf("%d", &n);    for(int i = 0; i < n; i++)    {        scanf("%d %d", &a, &b);        g[i].l = a, g[i].r = b;    }    for(int i = 0; i < n; i++)        scanf("%d", arr + i);    sort(arr, arr + n);    int cnt = 0;    dfs1(0, cnt);    k = 0;    bfs(0);    for(int i = 0; i < k; i++)        printf("%d%c", res[i], i == k - 1 ? '\n' : ' ');    return 0;}



0 0
原创粉丝点击