hdu3999The order of a Tree (二叉排序树(BST))
来源:互联网 发布:golang 1.8 新特性 编辑:程序博客网 时间:2024/06/04 18:29
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.
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 sequence of 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
41 3 4 2
Sample Output
1 3 2 4
Source
2011 Multi-University Training Contest 16 - Host by TJU
#include<stdio.h>#include<malloc.h>typedef struct tree{ struct tree *lchilde,*rchilde; int w;}tree,*Tree;void creaRoot(Tree &root)//创建根节点{ root=(Tree)malloc(sizeof(tree)); root->lchilde=root->rchilde=NULL;}void printTree(Tree root,int k)//遍历树并输出该节点的值{ if(root==NULL) return ;//为空时反回 if(k==0) printf("%d",root->w); else printf(" %d",root->w); printTree(root->lchilde,k+1);//先搜左 printTree(root->rchilde,k+1);//后搜右}void InTree(Tree &node,int x)//建立二叉树,比当前节点小的放左边,否则放右边{ Tree T; if(node==NULL)//为空时,就把该值放到该节点 { T=(Tree)malloc(sizeof (tree)); T->w=x; T->lchilde=T->rchilde=NULL;//把左右孩子置为空 node=T; } else//不为空,继续搜 { if(x<=node->w) InTree(node->lchilde,x); else InTree(node->rchilde,x); }}int main(){ Tree root; int n,i,x; while(scanf("%d",&n)>0) { if(n==0)continue; creaRoot(root); scanf("%d",&x); root->w=x; for(i=2;i<=n;i++) { scanf("%d",&x); InTree(root,x); } printTree(root,0); printf("\n"); }}
- hdu3999The order of a Tree (二叉排序树(BST))
- hdu3999 The order of a Tree(BST)
- HDOJ 3999 The order of a Tree(二叉排序树)
- 二叉排序树:HUD3999-The order of a Tree(二叉排序树字典序输出)
- hdu3999 the order of a tree - BST二叉搜索树的前序遍历
- HDU 3999 The order of a Tree 二叉搜索树 BST
- hdu 3999The order of a Tree
- Hdu 3999 - The order of a Tree
- HDU3999:The order of a Tree
- HDU 3999 The order of a Tree
- The order of a Tree HDU
- hdu 3999:The order of a Tree
- HDU The order of a Tree
- hdu 3999The order of a Tree
- hdu 3999 The order of a Tree
- hdu 3999 The order of a Tree
- hdu 3999 The order of a Tree
- HDU3999-The order of a Tree
- 在SQL Server2008R2中附加数据库失败
- 三种东西永远不要放到数据库里
- C++中的资源管理
- G-Sensor 8452驱动及相关
- C++内存操作
- hdu3999The order of a Tree (二叉排序树(BST))
- [读书笔记]元编程 5
- svn管家的使用心得
- HDU 2159 二维费用背包问题
- SQL Server 2008 附加数据库时出错
- UVA 10635 Prince and Princess (动态规划)
- if(男深圳集体户口&&女非深圳户口)深圳准生证办理材料及流程
- C++深入—内存泄露
- 解决360浏览器和谷歌(Google Chrome)浏览器下CSS设置字体大小小于12px无法生效的问题