Tree


SUBMITTED BY: Guest

DATE: Dec. 15, 2016, 10:24 a.m.

FORMAT: Text only

SIZE: 4.1 kB

HITS: 1063

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct node_s
  5. {
  6. char songtitle[256], interpreter[256];
  7. struct node_s *parent, *left, * right;
  8. } node_t;
  9. node_t *create_node(char songtitle[], char interpreter[])
  10. {
  11. node_t *new;
  12. if(!(new=calloc(1,sizeof(node_t))))
  13. {
  14. fprintf(stderr,"Fehler bei Speicherallozierung!\n");
  15. exit(-1);
  16. }
  17. strcpy(new->songtitle,songtitle);
  18. strcpy(new->interpreter,interpreter);
  19. new->parent=0;
  20. new->left=0;
  21. new->right=0;
  22. printf("Knoten erstellen: %s %s\n",new->songtitle,new->interpreter);
  23. return new;
  24. }
  25. node_t *insert_node(node_t *rootnode, char songtitle[], char interpreter[])
  26. {
  27. node_t *new=create_node(songtitle,interpreter);
  28. if(rootnode==0)
  29. return new;
  30. else
  31. {
  32. if(strcmp(new->songtitle,rootnode->songtitle)<=0)
  33. rootnode->left=insert_node(rootnode->left,songtitle,interpreter);
  34. else
  35. rootnode->right=insert_node(rootnode->right,songtitle,interpreter);
  36. }
  37. return rootnode;
  38. }
  39. void print(node_t *tree, long indent) {
  40. long i;
  41. if(tree->right != NULL)
  42. print(tree->right, indent + 1);
  43. for (i = 0; i < indent; ++i)
  44. printf(" ");
  45. printf("%s: %s\n", tree->interpreter, tree->songtitle);
  46. if(tree->left != NULL)
  47. print(tree->left, indent + 1);
  48. }
  49. void print_asked(node_t *tree) {
  50. printf("--- Tree ---\n");
  51. print(tree, 0);
  52. printf("--- ---\n");
  53. }
  54. void destroy_nodes(node_t *node)
  55. {
  56. if(node->left)
  57. destroy_nodes(node->left);
  58. if(node->right)
  59. destroy_nodes(node->right);
  60. free(node);
  61. return;
  62. }
  63. node_t *search_node(node_t *rootnode, char songtitle[])
  64. {
  65. if(!(strcmp(songtitle,rootnode->songtitle)))
  66. return rootnode;
  67. if((strcmp(songtitle,rootnode->songtitle)<=0)&&(rootnode->left!=0))
  68. rootnode=search_node(rootnode->left,songtitle);
  69. else
  70. {
  71. if(rootnode->right!=0)
  72. search_node(rootnode->right,songtitle);
  73. else
  74. {
  75. fprintf(stderr,"Knoten existiert nicht!\n");
  76. return 0;
  77. }
  78. }
  79. return rootnode;
  80. }
  81. long count_nodes_with_interpreter(node_t *rootnode, char interpreter[]) {
  82. long num = 0;
  83. if(strcmp(rootnode->interpreter, interpreter) == 0)
  84. num++;
  85. if(rootnode->left != NULL)
  86. num += count_nodes_with_interpreter(rootnode->left, interpreter);
  87. if(rootnode->right != NULL)
  88. num += count_nodes_with_interpreter(rootnode->right, interpreter);
  89. return num;
  90. }
  91. long count_nodes(node_t *rootnode)
  92. {
  93. long num=1;
  94. if(rootnode->left!=0)
  95. num+=count_nodes(rootnode->left);
  96. if(rootnode->right!=0)
  97. num+=count_nodes(rootnode->right);
  98. return num;
  99. }
  100. long count_nodes_with_interpreter(node_t *rootnode, char interpreter[])
  101. {
  102. long num=0;
  103. if((strcmp(rootnode->interpreter,interpreter))==0)
  104. num++;
  105. if(rootnode->left!=0)
  106. {
  107. num=count_nodes_with_interpreter(rootnode->left,interpreter);
  108. if((strcmp(rootnode->interpreter,interpreter))==0)
  109. num++;
  110. }
  111. if(rootnode->right!=0)
  112. {
  113. num=count_nodes_with_interpreter(rootnode->right,interpreter);
  114. if((strcmp(rootnode->interpreter,interpreter))==0)
  115. num++;
  116. }
  117. return num;
  118. }
  119. int main()
  120. {
  121. node_t *node=0,*search=0;
  122. printf("Baum!\n");
  123. node=insert_node(node,"abc","abc");
  124. print(node);
  125. node=insert_node(node,"def","def");
  126. print(node);
  127. node=insert_node(node,"abc","ghi");
  128. print(node);
  129. node=insert_node(node,"jkl","abc");
  130. print(node);
  131. node=insert_node(node,"jjk","abc");
  132. print(node);
  133. node=insert_node(node,"bbc","abc");
  134. print(node);
  135. search=search_node(node,"bbc");
  136. if(search!=0)
  137. printf("\nbbc gefunden!\n");
  138. printf("Knotenanzahl: %ld\n",count_nodes(node));
  139. printf("Kontenanzahl mit Interpreter abc: %ld\n",count_nodes_with_interpreter(node,"abc"));
  140. destroy_nodes(node);
  141. return 0;
  142. }

comments powered by Disqus