HDU3999-The order of a Tree
2016-05-18 19:53
309 查看
The order of a Tree
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 64 Accepted Submission(s) : 34
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
As we know,the shape of a binary search tree is greatly related to the order of keys we insert. To be precisely:1. insert a key k to a empty tree, then the tree become a tree with
only one node;
2. insert a key k to a nonempty tree, if k is less than the root ,insert
it to the left sub-tree;else insert k to the right sub-tree.
We call the order of keys we insert “the order of a tree”,your task is,given a oder of a tree, find the order of a tree with the least lexicographic order that generate the same tree.Two trees are the same if and only if they have the same shape.
Input
There are multiple test cases in an input file. The first line of each testcase is an integer n(n <= 100,000),represent the number of nodes.The second line has n intergers,k1 to kn,represent the order of a tree.To make if more simple, k1 to kn is a sequenceof 1 to n.
Output
One line with n intergers, which are the order of a tree that generate the same tree with the least lexicographic.
Sample Input
4 1 3 4 2
Sample Output
1 3 2 4
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; #define N 100005 int tree ,l ,r ,a ,num,flag,m; void fx(int index,int x) { if( x <= tree[index] ) { if(l[index] == -1) l[index] = flag; else fx(l[index],x); } else { if(r[index] == -1) r[index] = flag; else fx(r[index],x); } } void f(int index) { a[m++] = tree[index]; if(l[index] != -1) f(l[index]); if(r[index] != -1) f(r[index]); } int main() { int n,i,x,root; while(~scanf("%d",&n)) { memset(l,-1,sizeof(l)); memset(r,-1,sizeof(r)); root = -1; flag = 0; for(i = 0; i< n; i++) { scanf("%d",&x); if(root == -1) tree[++root] = x; else { tree[++flag] = x; fx(root,x); } } m = 0; f(root); for(i = 0; i < m -1; i++) printf("%d ",a[i]); printf("%d\n",a[m-1]); } return 0; }
相关文章推荐
- matlab膨胀和腐蚀的案例详解
- innobackupex恢复操作解压备份文件报错一例
- https://github.com/hehonghui/android-tech-frontier
- ubuntu下Qt cannot find -lGL错误的解决方法
- 广义表
- 剑指offer <从1 到 n 整数中1 出现的次数>(8)
- 膨胀和腐蚀在MATLAB中
- OC字符串去除首字母,OC字符串去除-号
- 2016第21周三问题记录
- 推荐一个计算机视觉图书:python计算机视觉编程
- SearchView--搜索框案例
- LaTeX新人教程,30分钟从完全陌生到基本入门
- Selenium2+JUnit+FirefoxDriver操作页面中的选择按钮
- 归并排序
- 第十、十一周项目5:教师兼干部类
- 移动端开发:使用jQuery Mobile还是Zepto
- 第12周【项目 1-实现复数类中的运算符重载(1)】
- uva 10652(凸包)
- 栈的压入、弹出序列
- office word插入数学公式引起的行间距增大的解决方法