看图写树(树的先序遍历!)

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt2767 声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 查看本文更新与讨论请点击: 链接被删请百度: CSDN tt2767 ///////////////////////////////////////////////////////////////////////////////////////////////////////

妈蛋,这题坑了我2个多小时。。终于过了。。 做的时候主要在这几个WA点卡住了: 1.读取行数的时候忘记减去“#”的行数了 2.没有考虑到空树的情况 3.递归的时候没有判断右边界值‘\0’ 4.被样例误导了,以为节点只能是字母。。。。。。

一个发现: 用 isspace() 或者 isalpha() 比手动判断要快!

本题解法: 在读取到节点的时候,如果发现下面有字符‘|’,,把此节点当作根,递归的向下读取(dfs)并通过‘—-’判断自己儿子的范围。

N = 300;char G[N][N];void dfs(int,int);void solve();int Case,n;int main(){scanf(“%d”,&Case);getchar();while(Case–){memset(G,’\0′,sizeof(G));int i ,j;for(i = 0 ; strcmp( gets(G[i]),”#”) ; i++) ;i–; //减去#的那一行printf(“(“);if(i!=-1) //判断是不是空树{for( j = 0 ; j < strlen(G[0]) ; j++)if( !isspace(G[0][j]))break;dfs(0,j);}printf(“)\n”);}return 0;}void dfs(int x, int y){printf(“%c”,G[x][y]);printf(“(“);if(G[x+1][y] == ‘|’){while(G[x+2][y–] == ‘-‘); //查找“—-”的开始y+=2;for(; G[x+2][y] == ‘-‘ && G[x+3][y] !=’\0’ ; y++ )//注意右边界范围if( !isspace(G[x+3][y]))dfs(x+3,y);}printf(“)”);}

人生就像是一场旅行,遇到的既有感人的,

看图写树(树的先序遍历!)

相关文章:

你感兴趣的文章:

标签云: