pat 5-7 Complete Binary Search Tree (30分)
2016-07-04 11:10
253 查看
5-7 Complete 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.A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer NN (\le1000≤1000).Then NN distinctnon-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at theend of the line.Sample Input:
10 1 2 3 4 5 6 7 8 9 0
Sample Output:
6 3 8 1 5 7 9 0 2 4
完全二叉树排序后,对于根,左二子是i*2,右儿子是i*2+1
#include <iostream>#include <algorithm>using namespace std;#include <bits/stdc++.h>int a[20005];int b[20005];int len;void dd(int a[20005],int x,int n){if(x*2<=n)dd(a,x*2,n);b[x]=a[len++];// cout<<b<<endl;if(x*2+1<=n)dd(a,x*2+1,n);}int main(){int n;int i;while(cin>>n){len=0;for(i=0; i<n; i++)cin>>a[i];sort(a,a+n);dd(a,1,n);for(i=1; i<=n-1; i++)cout<<b[i]<<" ";cout<<b<<endl;}}
相关文章推荐
- 递归
- 中国剩余定理的解析及记忆(扩展欧几里得算法的运用)
- 素数表的快速建立,合数分解,1-2^31内某个长度小于10w的区间素数筛选的三个模板及解析
- 线段树3种基础模型的理解和记忆(任意区间求和,任意区间的所有数加上相同数(懒操作),任意区间所有数变成同一个值再求和)
- ZOJ 1610 Count the Colors 多次更新一次查询,只需要一一标记
- POJ 3264 Balanced Lineup 查询区间最大最小值 基础线状树水题
- HDU 1698 Just a Hook 线状树经典模型之区间变动bool标记,上下同时更新
- POJ 3468 A Simple Problem with Integers(线状树经典模型之lazy操作)
- POJ 2251 Dungeon Master 比较有趣的三维迷宫bfs搜索路径
- 论Acmer的自我修养 (算法学习目标和推荐题目)
- HDU 1260 Tickets (很简单的基础DP题,找到状态转移方程就直接AC了)
- HDU 1176 免费馅饼 (类似于数塔DP的题目,注意边界条件,细节处理)
- HDU 1114 Piggy-Bank (完全背包水题,但注意一下时间输出)
- HDU 1087 Super Jumping!Jumping!Jumping求连续上升子序列的最大和值 (解析)
- HDU 1069 Monkey and Banana 对比优先权的设置和排序问题(解析)
- HDU 1029 Ignatius and the Princess IV(动规水题,有个很精妙的快解法)
- HDU 1024 Max Sum Plus Plus求前n个数中的若干个数分为连续的m段的最大和值(解析)
- HDU2000
- HDU2003
- HDU1095