数据结构实验之查找三:树的种类统计
程序员文章站
2022-03-24 16:21:50
...
真的不明白哪里错了。。。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int n;
struct node
{
char data[21];
int d;//d是默认初始值为0吗?
struct node*l,*r;
};
struct node*c(struct node*root,char a[21])
{
if(!root)
{
root=(struct node*)malloc(sizeof(struct node));
strcpy(root->data,a);
root->d=0;//可以不初始化吗,它是默认的吗?
root->d++;
root->l=root->r=NULL;
}
else
{
int x=strcmp(a,root->data);
if(x<0)//左子树
root->l=c(root->l,a);
else if(x>0)
root->r=c(root->r,a);
else root->d++;
}
return root;
};
void zx(struct node*root)
{
if(!root)
{
zx(root->l);
printf("%s %.2lf%%\n",root->data,root->d*100.0/n);//%表示
zx(root->r);
}
}
int main()
{
struct node *root=NULL;
char a[22];
scanf("%d",&n);
getchar();
int i,j;
for(j=0;j<n;j++)
{
gets(a);
int len=strlen(a);
for(i=0; i<len; i++)
{
if(a[i]>='A'&&a[i]<='Z')//不区分大小写,就全置为小写
{
a[i]+=32;
}
}
root=c(root,a);
}
zx(root);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int n;
struct node
{
char data[21];
int d;//d是默认初始值为0吗?
struct node*l,*r;
};
struct node*c(struct node*root,char *a)
{
if(!root)
{
root=(struct node*)malloc(sizeof(struct node));
strcpy(root->data,a);
root->d=1;
root->l=root->r=NULL;
}
else
{
int x=strcmp(a,root->data);
if(x<0)//左子树
root->l=c(root->l,a);
else if(x>0)
root->r=c(root->r,a);
else root->d++;
}
return root;
};
void midsort(struct node *root)
{
if(root)
{
midsort(root->l);
printf("%s %.2lf%%\n",root->data,root->d*100.0/n);//用root->d/n来表示每种树的百分比
midsort(root->r);
}
}
int main()
{
struct node *root=NULL;
char a[22];
scanf("%d",&n);
getchar();
int i,j;
for(j=0;j<n;j++)
{
gets(a);
int len=strlen(a);
for(i=0; i<len; i++)
{
if(a[i]>='A'&&a[i]<='Z')//不区分大小写,就全置为小写
{
a[i]+=32;
}
}
root=c(root,a);
}
midsort(root);
return 0;
}
上一篇: 数据结构实验之栈与队列七:出栈序列判定
下一篇: 结构化数据