标签:
http://acm.hdu.edu.cn/showproblem.php?pid=3999
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1361 Accepted Submission(s): 695
题解:题目意思即,给你一个插入数列,形成一棵二叉树,你给出字典序最小的插入方法建相同的一棵树出来。说白了,就是求先序序列。
代码:
1 #include <fstream> 2 #include <iostream> 3 4 using namespace std; 5 6 typedef struct Node{ 7 Node *lch,*rch,*nex; 8 int x; 9 Node(int x){ 10 this->x=x; 11 lch=NULL; 12 rch=NULL; 13 } 14 }inode; 15 16 int n,tn; 17 inode *head; 18 19 void insert(int t); 20 void preOrder(inode *p); 21 22 int main() 23 { 24 //freopen("D:\\input.in","r",stdin); 25 //freopen("D:\\output.out","w",stdout); 26 int t; 27 while(~scanf("%d",&n)){ 28 scanf("%d",&t); 29 head=new inode(t); 30 for(int i=1;i<n;i++){ 31 scanf("%d",&t); 32 insert(t); 33 } 34 tn=0; 35 preOrder(head); 36 } 37 return 0; 38 } 39 void insert(int t){ 40 inode *p=head,*s=new inode(t); 41 while(p!=NULL){ 42 if(t<p->x) 43 if(p->lch!=NULL) p=p->lch; 44 else{ 45 p->lch=s; 46 break; 47 } 48 else 49 if(p->rch!=NULL) p=p->rch; 50 else{ 51 p->rch=s; 52 break; 53 } 54 } 55 } 56 void preOrder(inode *p){ 57 if(p!=NULL){ 58 printf("%d",p->x); 59 if(++tn<n) printf(" "); 60 else printf("\n"); 61 preOrder(p->lch); 62 preOrder(p->rch); 63 delete p; 64 } 65 }
hdu3999-The order of a Tree (二叉树的先序遍历)
标签:
原文地址:http://www.cnblogs.com/jiu0821/p/4634657.html