日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVa122-Trees on the level

發(fā)布時間:2025/7/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVa122-Trees on the level 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.題目描述:點擊鏈接

2.問題分析:

簡單地來說,就是輸入一組字符串,表示二叉樹上某些節(jié)點的值和位置,這些節(jié)點不一定可以組成一顆完整的二叉樹,可能出現(xiàn)缺少某個節(jié)點或者某個節(jié)點冗余的情況。

需要我們進行判斷是否能組成一顆完整的二叉樹,若可以按照由上到下,由左到右的順序輸出每個節(jié)點的值,若不能則輸出not complete

3.輸入數(shù)據(jù)分析:

題目上給出節(jié)點的個數(shù)不超過256個,如果按照最壞的情況去考慮,256個節(jié)點組成一條單鏈,那么最后一個節(jié)點的編號會非常大,所以不能用暴力去解決。

4.算法設計:

由于節(jié)點的不確定,最好構建一個二叉樹,然后往樹里添加新的節(jié)點,最后使用bfs查找是否存在缺少或者多余的情況。

5.代碼:

1 #include<iostream> 2 #include<vector> 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<cstring> 6 #include<queue> 7 #include<string.h> 8 using namespace std; 9 const int maxn=256+10; 10 char s[maxn]; 11 bool failed; 12 struct Node{ 13 int v; 14 bool have_value; 15 Node *left,*right; 16 Node():have_value(false),left(NULL),right(NULL){} 17 }; 18 Node *root; 19 Node *newnode(){return new Node();} 20 void addnode(int v,char *s){ 21 int n=strlen(s); 22 Node *u=root; 23 for(int i=0;i<n;i++) 24 { 25 if(s[i]=='L'){ 26 if(u->left==NULL)u->left=newnode(); 27 u=u->left; 28 } 29 else if(s[i]=='R'){ 30 if(u->right==NULL)u->right=newnode(); 31 u=u->right; 32 } 33 } 34 if(u->have_value==1) failed=true; 35 u->have_value=1; 36 u->v=v; 37 } 38 bool read_input(){ 39 failed=false; 40 root=newnode(); 41 for(;;){ 42 if(scanf("%s",s)==EOF)return false; 43 if(strcmp(s,"()")==0)break; 44 int v; 45 sscanf(&s[1],"%d",&v); 46 addnode(v,strchr(s,',')+1); 47 } 48 return true; 49 } 50 bool bfs(vector<int>&ans){ 51 queue<Node*>q; 52 ans.clear(); 53 q.push(root); 54 while(!q.empty()){ 55 Node* u=q.front();q.pop(); 56 if(!u->have_value)return false; 57 ans.push_back(u->v); 58 if(u->left!=NULL)q.push(u->left); 59 if(u->right!=NULL)q.push(u->right); 60 } 61 return true; 62 } 63 int main() 64 { 65 freopen("in.txt","r",stdin); 66 while(1) 67 { 68 if(read_input()==0)break; 69 vector<int>ans; 70 if(!failed&&bfs(ans)){ 71 int n=ans.size(); 72 for(int i=0;i<n;i++) 73 printf("%d%c",ans[i],i==n-1?'\n':' '); 74 } 75 else{ 76 printf("not complete\n"); 77 } 78 } 79 return 0; 80 }

?

轉載于:https://www.cnblogs.com/bo2000/p/9827615.html

總結

以上是生活随笔為你收集整理的UVa122-Trees on the level的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。