[PAT解题报告] Build A Binary Search Tree

给定树结构,和一些整数,把这些整数填写到树结构中,恰好形成BST (Binary Search Tree)。BST的定义已经给定就是左边节点的值都比它小,右边的值都不比它小。
其实也不难,二叉树的形态已经知道了,我们先把二叉树建立起来而不管节点上的值。输入给了每个节点的左右孩子,我们自然就有了树结构。问题是如何生成BST呢?怎么才能把数填进去?
BST的关键是中序遍历之后得到的数是有序的。 那么我们自然可以把所有的树排序,再中序遍历顺便填上这些数——按照由小到大的顺序填就可以,关键是中序遍历告诉我们这些节点访问的顺序了。 另外一种方法就是,统计出每个节点左孩子子树的个数——这样也就变相地知道这个数应该填几了。
构造好树以后,输出是层序遍历的结果。那么一个可以用一个显然的bfs, 用队列就可以一层一层地访问出所有节点,直接输出就可以了。

代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>

using namespace std;


int left[105];
int right[105];
int a[105];
int b[105];
queue<int> q;

void dfs(int now, int &x) {
    if (now < 0) {
        return;
    }
    dfs(left[now], x);
    b[now] = a[x++];
    dfs(right[now], x);
}

int main() {
int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d%d",&left[i], &right[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d", &a[i]);
    }
    sort(a, a + n);
    dfs(0, n = 0);      
    bool mark = false;
    for (q.push(0); !q.empty(); q.pop()) {
        if (mark) {
            putchar(' ');
        }
        else {
            mark = true;
        }
        int x = q.front();
        printf("%d", b[x]);
        if (left[x] >= 0) {
            q.push(left[x]);
        }
        if (right[x] >= 0) {
            q.push(right[x]);
        }
    }
    puts("");
    return 0;
}

原题链接: http://www.patest.cn/contests/pat-a-practise/1099
全部评论

相关推荐

今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,也有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务