http://www.patest.cn/contests/pat-a-practise/1099

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
此题是2015年春季的研究生入学考试复试时的机试题,链接 http://www.patest.cn/contests/graduate-entrance-exam-2015-03-20

这道题的考点有:树的构造、中序遍历(BST,递归)、层序遍历(层序输出,队列)、排序(怎么省事怎么来)。
可能看第一遍时觉得挺复杂的,但是如果树的遍历掌握的话,只要列出处理流程就很简单明了了。 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树):
它或者是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉排序树。 本题给出节点的左右孩子的下标和一些整型数据,要求构造出一个BST,然后层序输出这颗二叉树上所有节点的key值。 第一步,我们需要构造这棵BST,以便数据归位。实际上,这些节点本身就代表这棵二叉树,这一步使我们在头脑中(概念上)构造二叉树,不需要敲代码实现,考察的对二叉树的理解。
第二步,数据是无序的,所以为了数据归位,需要进行排序。数据量很小,不超过100,所以怎么简单怎么排,反正内存大小和时间足足的.
第三步,进行数据归位。根据bst的性质,其实就是中序处理每个节点。
第四步,按要求层序输出即可。 总结:输入->keys排序->中序遍历,key值归位->层序遍历,格式输出。
 #include<cstdio>
#include<cstring>
// a positive integer N (<=100)
int num=,node[][]={{,,}},keys[]={},keyloc=;
void levelprint()
{
int level[]={},start=,len=;
level[start]=,len++;
while(len)
{
if(node[level[start]][]!=-)//左子树
level[start+len]=node[level[start]][],len++;
if(node[level[start]][]!=-)//左子树
level[start+len]=node[level[start]][],len++; if(start) printf(" ");
printf("%d",node[level[start]][]);
start++,len--;
} }
void inorder(int rootloc)
{
if(node[rootloc][]!=-)//左子树
inorder(node[rootloc][]);
node[rootloc][]=keys[keyloc],keyloc++; //本节点
// printf("\n %d %d %d %d",rootloc,node[rootloc][0],node[rootloc][1],node[rootloc][2]);
if(node[rootloc][]!=-)//右子树
inorder(node[rootloc][]);
}
void keyssort()
{
for(int i=;i<num;i++)
{
int key=keys[i],loc=i-;
for(;loc>=;loc--) if(keys[loc]<=key) break;
loc++;
for(int j=i;j>loc;j--) keys[j]=keys[j-];
keys[loc]=key;
}
}
int main()
{
scanf("%d",&num);
for(int i=;i<num;i++) scanf("%d%d",&node[i][],&node[i][]);
for(int i=;i<num;i++) scanf("%d",keys+i);
keyssort();//keys排序 升序
inorder();//中序遍历,keys归位
levelprint();//层序输出
return ;
}

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

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

    题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...

  2. pat 甲级 1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  3. 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 proper ...

  4. Pat(Advanced Level)Practice--1043(Is It a Binary Search Tree)

    Pat1043代码 题目描写叙述: A Binary Search Tree (BST) is recursively defined as a binary tree which has the f ...

  5. 1099. Build A Binary Search Tree (30)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

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

    预处理每个节点左子树有多少个点. 然后确定值得时候递归下去就可以了. #include<cstdio> #include<cstring> #include<cmath& ...

  7. PAT (Advanced Level) 1043. Is It a Binary Search Tree (25)

    简单题.构造出二叉搜索树,然后check一下. #include<stdio.h> #include<algorithm> using namespace std; +; st ...

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

    题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...

  9. PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90701125 1099 Build A Binary Searc ...

随机推荐

  1. DP简单问题联系--最长递增子序列+最长公共子序列等

    今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了...心态爆炸,感觉去考试怕是要gg了... 不过今天总结一下写的题目,全部都是基础的dp问题 第一个是 求最长不下降子序列的长度 第一行 ...

  2. ugui mask失效

    android平台 PlayerSettings-Resolution and Presentation-DisableDepth and Stencil这项勾选,mask失效

  3. 基于ndk_r7_windows编译实现ndk项目,不需要cygwin

    下面就介绍下Android NDK的入门学习过程: 入门的最好办法就是学习Android自带的例子, 这里就通过学习Android的NDK自带的demo程序:hello-jni来达到这个目的. 一. ...

  4. Ogre 整体框架入门

    ogre 是面向对象的3d图形引擎. root 是引擎的一个界面类,包含很多快捷的调用其他类的接口. 在ogre中,广泛的使用了单件模式,同时最大的保证了你不需要自己管理资源,除了是你自己new的对象 ...

  5. 5本自然语言处理书单-附pdf

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 自然语言处理(英语:Natural Language Processing,缩写作 NLP)是人工智能 ...

  6. webpack 中导入 vue 和普通网页使用 vue 的区别(四)

    一:在普通网页中使用 vue 使用 script 标签,引入 vue 包 在 ndex 页面中,创建一个 id 为 App 的 div 容器 通过 new Vue 得到一个 vue 实例 二:在 we ...

  7. STC单片机掉电断电失电瞬间EEPROM数据保存处理办法(转)

    由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回 ...

  8. nginx之location、rewrite配置

    https://www.cnblogs.com/koal/p/6915106.html rewrite  地址重写 如上配置对于: /images/ttt/test.png 会重写到/mic?file ...

  9. 2017 Multi-University Training Contest - Team 1 Add More Zero

    Problem Description There is a youngster known for amateur propositions concerning several mathemati ...

  10. UG 常用设置

    Q01:UG制图,添加基本视图之后的中心线怎么去掉? A01:“菜单-->文件-->首选项-->制图-->视图-->公共-->常规-->□带中心线创建”,取消 ...