首页 > 代码库 > [ An Ac a Day ^_^ ] hdu 1662 数据结构 二叉树
[ An Ac a Day ^_^ ] hdu 1662 数据结构 二叉树
紫书上的原题 正好学数据结构拿出来做一下
不知道为什么bfs的队列一定要数组模拟……
还可以练习一下sscanf……
1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<math.h> 5 #include<string.h> 6 #include<string> 7 #include<map> 8 #include<set> 9 #include<vector> 10 #include<queue> 11 #define M(a,b) memset(a,b,sizeof(a)) 12 using namespace std; 13 typedef long long ll; 14 const int inf=0x3f3f3f3f; 15 queue<int>ans; 16 struct Binary_Tree //二叉树 17 { 18 int value; 19 Binary_Tree *lchild,*rchild; 20 Binary_Tree() 21 { 22 value=http://www.mamicode.com/0; 23 lchild=rchild=NULL; 24 } 25 }; 26 bool add(Binary_Tree *&Root,char *s,int value){ //向二叉树中加入点 27 if(Root==NULL) 28 Root=new Binary_Tree(); 29 if(*s==‘\0‘) 30 { 31 if(Root->value!=0) 32 { 33 return false; 34 } 35 Root->value=http://www.mamicode.com/value; 36 return true; 37 } 38 if(*s==‘L‘) //寻找路径 39 { 40 return add(Root->lchild,s+1,value); 41 } 42 else if(*s==‘R‘) 43 { 44 return add(Root->rchild,s+1,value); 45 } 46 return false; 47 } 48 void Delete(Binary_Tree *Root) //删除二叉树 49 { 50 if(Root==NULL) return ; 51 Delete(Root->lchild); 52 Delete(Root->rchild); 53 delete Root; 54 } 55 bool bfs(Binary_Tree *Root) //层次遍历 56 { 57 Binary_Tree *q[260]; //数组模拟队列 58 int front=0; 59 int rear=1; 60 q[0]=Root; 61 while (front<rear) 62 { 63 Binary_Tree *temp=q[front++]; 64 if(!temp->value) //没有值就返回false 65 { 66 return false; 67 } 68 ans.push(temp->value); //当前节点入ans队 69 if(temp->lchild) //左孩子入队 70 { 71 q[rear++]=temp->lchild; 72 } 73 if(temp->rchild) //右孩子入队 74 { 75 q[rear++]=temp->rchild; 76 } 77 } 78 return true; 79 } 80 int main(){ 81 Binary_Tree *Root=NULL; 82 char s[50]; 83 bool no=false; 84 while(true) 85 { 86 no=false; 87 Delete(Root); 88 Root=NULL; //二叉树初始化 89 while(true) 90 { 91 if(scanf("%s",s)==EOF) //读入 92 { 93 return 0; 94 } 95 if(strcmp(s,"()")==0) 96 { 97 break; 98 } 99 int val;100 char loc[10];101 strcpy(loc,"");102 sscanf(&s[1],"%d",&val);103 char *start=strchr(s,‘,‘)+1;104 sscanf(start,"%[A-Z]",&loc);105 if(!add(Root,loc,val))106 {107 no=true;108 }109 }110 if(no)111 {112 puts("not complete");113 }114 else115 {116 if(!bfs(Root))117 puts("not complete");118 else119 {120 while(!ans.empty())121 {122 int ll=ans.front();123 ans.pop();124 printf("%d%c",ll,ans.empty()?‘\n‘:‘ ‘);125 }126 }127 }128 }129 return 0;130 }131 /*132 133 (11,LL) (7,LLL) (8,R)134 (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()135 (3,L) (4,R) ()136 137 */
[ An Ac a Day ^_^ ] hdu 1662 数据结构 二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。