欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构实验之查找三:树的种类统计

程序员文章站 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;
}