Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct c
  5. {
  6. int number;
  7. struct c *left;
  8. struct c *right;
  9. }node;
  10.  
  11. node *newNode(int element)
  12. {
  13. node *new;
  14. new = (node *)malloc(sizeof(node));
  15. if (new == 0)
  16. return 0;
  17. new->number = element;
  18. new->left = 0;
  19. new->right = 0;
  20.  
  21. return new;
  22. }
  23.  
  24. node *add_element(node *root, int new)
  25. {
  26. if (root == 0)
  27. return newNode(new);
  28.  
  29. if (new < root->number)
  30. root->left = add_element(root->left, new);
  31. else
  32. root->right = add_element(root->right, new);
  33.  
  34. return root;
  35. }
  36.  
  37. void print_elementi(node *root)
  38. {
  39. if (root == 0) return;
  40. print_elementi(root->left);
  41. printf("%d -> ", root->number);
  42. print_elementi(root->right);
  43. }
  44.  
  45. void customPrint(node *root) // without recursion
  46. {
  47. if (root != NULL && root->left != NULL)
  48. {
  49. printf("%d -> ", root->left->number);
  50. root = root->left;
  51. while (root->right != NULL)
  52. {
  53. printf("%d ->", root->right->number);
  54. root = root->right;
  55. }
  56. }
  57. }
  58.  
  59. void print_tree(node *root, int space)
  60. {
  61. if (root == NULL)
  62. return;
  63.  
  64. space += 5;
  65.  
  66. print_tree(root->right, space);
  67.  
  68. printf("\n");
  69. for (int i = 5; i < space; i++) {
  70. printf(" ");
  71. }
  72.  
  73. printf("%d\n", root->number);
  74.  
  75. print_tree(root->left, space);
  76. }
  77.  
  78. int element_number(node *root)
  79. {
  80. if (root == 0)
  81. return 0;
  82.  
  83. return 1 + element_number(root->left) + element_number(root->right);
  84. }
  85.  
  86. int leaf_number(node *root)
  87. {
  88. if (root == 0)
  89. return 0;
  90.  
  91. if (root->left == 0 && root->right == 0)
  92. return 1;
  93.  
  94. return leaf_number(root->left) + leaf_number(root->right);
  95. }
  96.  
  97. int element_sum(node *root)
  98. {
  99. if (root == 0)
  100. return 0;
  101.  
  102. return root->number + element_sum(root->left) + element_sum(root->right);
  103. }
  104.  
  105. node *min(node *root)
  106. {
  107. if (root->left == NULL)
  108. return root;
  109.  
  110. return min(root->left);
  111. }
  112.  
  113. node *delete(node *root, int value)
  114. {
  115. if (root == NULL)
  116. return NULL;
  117. else if (value < root->number)
  118. root->left = delete(root->left, value);
  119. else if (value > root->number)
  120. root->right = delete(root->right, value);
  121. else
  122. {
  123.  
  124. if (root->left == NULL && root->right == NULL)
  125. {
  126. root = NULL;
  127. }
  128. else if (root->left == NULL)
  129. {
  130. root = root->right;
  131. }
  132. else if (root->right == NULL)
  133. {
  134. root = root->left;
  135. }
  136. else
  137. {
  138. node *tempnode = min(root->right);
  139. root->number = tempnode->number;
  140. root->right = delete(root->right, tempnode->number);
  141. }
  142.  
  143. }
  144.  
  145. return root;
  146. }
  147.  
  148. int search(node *root, int number)
  149. {
  150.  
  151. if (root == 0)
  152. return 0;
  153.  
  154. if (root->number == number)
  155. return 1;
  156.  
  157. if (number < root->number)
  158. return search(root->left, number);
  159. else
  160. return search(root->right, number);
  161.  
  162. }
  163.  
  164. int main()
  165. {
  166. node *root = 0;
  167.  
  168. /*Adding elements to the tree*/
  169. root = add_element(root, 24);
  170. root = add_element(root, 18);
  171. root = add_element(root, 31);
  172. root = add_element(root, 11);
  173. root = add_element(root, 20);
  174. root = add_element(root, 29);
  175. root = add_element(root, 33);
  176. root = add_element(root, 7);
  177. root = add_element(root, 55);
  178. root = add_element(root, 21);
  179.  
  180.  
  181. /*print element*/
  182. printf("%s", "- ELEMENTS IN THE TREE: ");
  183. print_element(root);
  184.  
  185. print_tree(root, 5);
  186.  
  187. printf("%s", "- CUSTOM PRINT: ");
  188. customPrint(root);
  189.  
  190. system("pause");
  191. return 0;
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement