码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 122 Trees on the level

时间:2015-03-09 23:39:22      阅读:427      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出not complete

看的紫书照着敲的= = 先要将输入进来的值建成一颗二叉树(定义一个二叉树的节点,新建节点的函数,添加节点的函数),再对建好的二叉树遍历(BFS)

技术分享
 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath>  
 5 #include<vector> 
 6 #include<queue>
 7 #include<algorithm>  
 8 using namespace std;
 9 
10 typedef long long LL;
11 const int maxn=10000+5;
12 char s[maxn];
13 int failed;
14 vector<int> ans;
15 
16 struct Node{ //建立二叉树的一个结点 
17     bool have_value;//判断该结点是否被赋值过 
18     int v;
19     Node *left,*right;
20     Node():have_value(false),left(NULL),right(NULL){}//构造函数,即为赋初值 
21 };
22 
23 Node*root;
24 Node* newnode() { //创建一个新的结点 
25     return new Node();
26 }
27 
28 void addnode(int v,char *s){ //添加一个新的 结点 
29     int n=strlen(s);
30     Node* u=root;
31     for(int i=0;i<n;i++)
32     if(s[i]==L){
33         if(u->left==NULL) u->left=newnode();//如果左边的结点不存在,建立新的结点 
34         u=u->left; //向左走 
35     }
36     else if(s[i]==R){
37         if(u->right==NULL) u->right=newnode();//如果右边的结点不存在,建立新的结点 
38         u=u->right;//向右走 
39     }
40     if(u->have_value) failed=true; //如果已经赋过值 ,输入有误 
41     u->v=v;//标记 
42     u->have_value=true;    
43 }
44 
45 bool read_input(){
46     failed=false;
47     root=newnode();
48     for(;;){
49         if(scanf("%s",&s)!=1) return false;
50         if(!strcmp(s,"()")) break;
51         int v;
52         sscanf(&s[1],"%d",&v);
53         addnode(v,strchr(s,,)+1);
54     }
55     return true;
56 }
57 
58 
59 
60 
61 bool bfs(vector<int>& ans){
62     queue<Node*> q;
63     ans.clear();
64     q.push(root);
65     while(!q.empty()){
66         Node* u=q.front();q.pop();
67         if(!u->have_value) return false;//有结点没有被赋值,输出有误 
68         ans.push_back(u->v);//增加到输出序列尾部 
69         if(u->left!=NULL) q.push(u->left);//如果存在左子结点,放进队列 
70         if(u->right!=NULL) q.push(u->right);//    如果存在右子结点,放进队列
71     }
72     return true;
73 }
74 
75 int main()
76 {
77     int i;
78     while(read_input()){
79         if(failed||!bfs(ans)) printf("not complete\n");
80         else{
81             for(i=0;i<ans.size()-1;i++)
82             printf("%d ",ans[i]);
83             printf("%d\n",ans[i]);                    
84         }
85     }
86     return 0;    
87 }
View Code

 

 

 

 

 

 

 

 

数据结构学得好艰辛啊啊啊啊啊= =

UVa 122 Trees on the level

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4324629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!