C   32
inorder
Guest on 11th February 2023 01:25:11 AM


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. int total;
  5. struct node{
  6.         int n;
  7.         char name[50];
  8.         struct node *left, *right;
  9. };
  10. void inorder(struct node *ptr){
  11.         if(ptr){
  12.                 inorder(ptr->left);
  13.                 printf("%s %.4lf\n", ptr->name, ((double)ptr->n/(double)total)*100);
  14.                 inorder(ptr->right);
  15.         }
  16.         return;
  17. }
  18. int main(){
  19.         int n, way;
  20.         char temp[50];
  21.         struct node *current, *tree, *search;
  22.        
  23.         scanf("%d", &n);
  24.         getchar();
  25.         getchar();
  26.         while(n--){
  27.                 total = 0;
  28.                 while(gets(temp)){
  29.                         if(temp[0] == '\0')break;
  30.                         if(total == 0){
  31.                                 tree = (struct node*)malloc(sizeof(struct node*));
  32.                                 strcpy(tree->name, temp);
  33.                                 tree->n = 1;
  34.                                 tree->left = tree->right = NULL;
  35.                         }else{
  36.                                 search = tree;
  37.                                 current = (struct node*)malloc(sizeof(struct node*));
  38.                                 current->left = current->right = NULL;
  39.                                 while(1){
  40.                                         way = strcmp(temp, search->name);
  41.                         //              printf("[%d]", way);
  42.                                         if(way == 0){
  43.                                         //      puts("here");
  44.                                                 search->n++;
  45.                                 //              printf("%s:[%d]++\n", search->name, search->n);
  46.                                                 search = NULL;
  47.                                                 break;
  48.                                         }else if(way < 0){
  49.                                                 //puts("left");
  50.                                                 if(search->left == NULL){
  51.                                                         search->left = current;
  52.                                                         current->n = 1;
  53.                                                         strcpy(current->name, temp);
  54.                                                         current->left = current->right = NULL;
  55.                                                         search = NULL;
  56.                                                         break;
  57.                                                 }else if(search->left != NULL){
  58.                                         //              printf("left:[%s]\n", search->left->name);
  59.                                                         search = search->left;
  60.  
  61.                                                 }
  62.                                         }else if(way > 0){
  63.                                                 //puts("right");
  64.                                                 if(search->right == NULL){
  65.                                                         search->right = current;
  66.                                                         current->n = 1;
  67.                                                         strcpy(current->name, temp);
  68.                                                         current->left = current->right = NULL;
  69.                                                         search = NULL;
  70.                                                         break;
  71.                                                 }else if(search->right != NULL){
  72.                                                 //      printf("right:[%s]\n", search->right->name);
  73.                                                         search = search->right;
  74.                                                 }
  75.                                         }
  76.                                 }
  77.                         }
  78.                         total++;
  79.                 }
  80.                 inorder(tree);
  81.         }
  82.  
  83.     getchar();
  84.     return 0;
  85. }

Raw Paste

Login or Register to edit or fork this paste. It's free.