ZOJ 1700 Falling Leaves 树形结构

来源:互联网 发布:淘宝优惠卷软件挣钱 编辑:程序博客网 时间:2024/06/06 04:42

做法:看清题意即可。

#include<cstdio>#include<cstring>const int LMT=30;int head,cnt,tr,lev;struct node{int l,r,data;}nod[LMT];char ans[LMT],sec[LMT][LMT];void init(){int i;for(i=0;i<LMT;i++)nod[i].l=nod[i].r=-1;memset(ans,0,sizeof(ans));tr=head=0;lev=0;cnt=1;}void dfs(int pos,int pre,int is_left,int val){if(pos==-1){if(is_left)nod[pre].l=cnt;else nod[pre].r=cnt;nod[cnt].data=val;cnt++;return;}if(val>nod[pos].data)dfs(nod[pos].r,pos,0,val);else dfs(nod[pos].l,pos,1,val);}void see(int u){if(u==-1)return;ans[tr]=nod[u].data+'A';tr++;see(nod[u].l);see(nod[u].r);}int main(void){int j,i=0;init();while(~scanf("%s",sec[lev])&&strcmp(sec[lev],"*")&&strcmp(sec[lev],"$")){if(!strcmp(sec[lev],"$"))break;if(!strcmp(sec[lev],"*"))continue;lev++;while(~scanf("%s",sec[lev])&&strcmp(sec[lev],"*")&&strcmp(sec[lev],"$"))lev++;nod[head].data=sec[lev-1][0]-'A';for(i=lev-2;i>=0;i--)for(j=0;sec[i][j];j++)dfs(head,-1,-1,sec[i][j]-'A');see(head);printf("%s\n",ans);if(!strcmp(sec[lev],"$"))break;init();}return 0;}