题目大意:
如下图例子
可以描述为:(11,LL) (7,LLL) (8,R)(5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()
写一段程序层次输出这棵树,如果树不完整,输出”not complete”
解题思路:
无
代码如下:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef struct
{
string num;
string str;
}node;
node tree[300];
string temp;
bool cmp(node x,node y)
{
if(x.str.length()==y.str.length())
return x.str<y.str;
else return x.str.length()<y.str.length();
}
int main()
{
int i,j,flag,ff,len;
while(cin>>temp)
{
//string À಻¿ÉÒÔmemsetÇå0µÄ£¬²»È»ÒªREµÄ
for(i=0;i<300;i++)
{
tree[i].num="";
tree[i].str="";
}
i=1;
while(temp[i]!=',')
{ tree[0].num+=temp[i]; i++;}
i++;
if(temp[i]==')') tree[0].str="A";
else
{
while(temp[i]!=')')
{ tree[0].str+=temp[i]; i++;}
}
j=1;
while(cin>>temp)
{
if(temp=="()") break;
i=1;
while(temp[i]!=',')
{ tree[j].num+=temp[i]; i++;}
i++;
if(temp[i]==')') tree[j].str="A";
else
{
while(temp[i]!=')')
{ tree[j].str+=temp[i]; i++;}
}
j++;
}
len=j;
sort(tree,tree+len,cmp);
flag=0;
if(tree[0].str!="A") flag=1;
for(i=0;i<len;i++)
{
if(flag) break;
if(i!=j-1 && tree[i].str==tree[i+1].str) {flag=1; break;}
if(tree[i].str.length()>=2)
{
temp = tree[i].str.substr (0,tree[i].str.length()-1);
//cout<<"temp= "<<temp<<endl;
ff=0;
for(j=0;j<i;j++)
{
if(temp==tree[j].str)
{
ff=1;
break;
}
}
if(ff==0) flag=1;
}
//cout<<tree[i].num<<" "<<tree[i].str<<endl;
}
if(flag) cout<<"not complete"<<endl;
else
{
for(i=0;i<len-1;i++)
cout<<tree[i].num<<" ";
cout<<tree[i].num<<endl;
}
}
return 0;
}