#include<bits/stdc++.h>
using namespace std;
#define maxsize 100
typedef struct TLnode{
char data;
int d;
struct TLnode *lchild,*rchild;
}TLnode,*Tree;
void create(Tree &T,char s[],int &i)
{
if(s[i]=='0') T=NULL;
else{
T=new TLnode;
T->data=s[i];
create(T->lchild,s,++i);
create(T->rchild,s,++i);
}
}
void print(Tree T,int d,int sum[])
{
if(T)
{
sum[d]++;
print(T->lchild,d+1,sum);
print(T->rchild,d+1,sum);
}
}
//void judge(Tree T,int sum[])
//{
// int max=0;
// for(int i=0;i<10;i++)
// {
// if(sum[i]>max) max=sum[i];
// }
// cout<<sum;
//}
int main()
{
char s[maxsize];
Tree T;
while(cin>>s&&s[0]!='0')
{
int i=-1;
create(T,s,++i);
int d=0;
int sum[maxsize];
for(int i=0;i<maxsize;i++)
{
sum[i]=0;
}
print(T,d+1,sum);
// judge(T,sum);
int max=0;
for(int i=0;i<10;i++)
{
if(sum[i]>max) max=sum[i];
}
cout<<max;
// print(T,d+1);
cout<<endl;
}
}
在网上看了很多答案都不太合适,自己重新写了一个,ac通过。
思路:根据记录的每一次的层数d保存进入sum数组,每次同层数结点扫描到后sum对应d位置加一,最后只需要对比sum数组就可以了