UVa 712 S樹

來源:互聯網
上載者:User

標籤:uva   完全二叉樹   順序儲存   

題意:有一棵完全二叉樹,每層元素有同一變數表示,從上到下分別為x1,x2,... 最後一層葉子結點會有0或1的賦值,輸入給出。然後如果xi取值為0時,則往左子樹走,否則往右子樹走,直到走到葉子結點,得到一值。

思路:因為是完全二叉樹,可以用順序儲存,數組實現即可。另外也只需存葉子結點的值就行了。對一結點k來說,左孩子是2k,右孩子是2k+1。因為高度最大為7,最多有x7,所以可以直接取數組的第二位,即下標1,來獲得xk中的k。

注意:每個測試範例後有個空行,WA了一次~

二維數組作形參: 一是 char (*pt)[4] ; 二是 char pt[][5]  如果寫成char *pt[5] 就會提示錯誤:cannot convert `char (*)[5]‘ to `char**‘ for argument `3‘ to `void process(char*, int, char**)‘  意思是實參是char(*)[5],而形參是char**,不匹配。

[ ]的優先順序高於*,char (*pt)[4] 表示一個指向數組的指標,指向具有4個char值的數組的指標;char *pt[5] 表示指標數組,char型指標數組、有5個元素。

Code:

#include<stdio.h>#include<string.h>#define MAXN 200void process(char *vva,int len,char varord[][5]);int tree[MAXN];int main(){ int cnt=1; int n; while(scanf("%d",&n)==1 && n) {  char varord[8][5];  for(int i=0;i<n;++i)   scanf("%s",varord[i]);  getchar();  for(int i=0;i<(1<<n);++i)  {   char c=getchar();//printf("%c ",c);   tree[(1<<n)+i]=c-'0';         }  //for(int i=0;i<(1<<n);++i)  // printf("%d ",tree[i+(1<<n)]);  int m;  scanf("%d",&m);  printf("S-Tree #%d:\n",cnt++);  for(int i=0;i<m;++i)  {   char vva[10];   scanf("%s",vva);   process(vva,strlen(vva),varord);         }  printf("\n\n"); } return 0;   }void process(char *vva,int len,char varord[][5]){ int k=1; for(int i=0;i<len;++i) {  int t=varord[i][1]-'0';//因最多是x7,所以這裡可以直接減字元0。注意下標是1不是2.  if(vva[t-1]=='0') k=2*k;  else k=2*k+1;        } printf("%d",tree[k]);    }


UVa 712 S樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.