Advertisement
allekco

Binary tree

Oct 17th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <stddef.h>
  6. #include <time.h>
  7.  
  8. int k=0;
  9.  
  10. int randomazer (int min, int max){
  11. float random;
  12. random = rand();
  13. random = (random / RAND_MAX) * (max-min) + min;
  14. return((int)random);
  15. }
  16.  
  17. typedef struct fff {
  18. int key;
  19. int lengh;
  20. struct fff *left;
  21. struct fff *right;
  22. struct fff *parent;
  23. } node;
  24.  
  25.  
  26. node* new_node (int key, node *parent){
  27. node *tmp = (node*)malloc(sizeof(node));
  28. tmp -> left = tmp -> right = NULL;
  29. tmp -> key = key;
  30. tmp -> parent = parent;
  31. tmp -> lengh = 1;
  32. if (parent!=NULL) {
  33. tmp -> lengh = tmp -> parent -> lengh +1;
  34. }
  35.  
  36. if (k<tmp->lengh) k=tmp->lengh;
  37. // printf("\n lengh: %d \n", tmp -> lengh);
  38. // printf("3");
  39. return tmp;
  40. }
  41.  
  42. void add_node (node **head, int key){
  43. if (*head == NULL){ //if tree empty
  44. *head = new_node (key, NULL);
  45. // printf("4");
  46. }
  47. else{
  48. node *iter = *head;
  49. // printf("5");
  50. while (iter){
  51. // printf("6");
  52. if (key >= (iter -> key)){
  53. // printf("7");
  54. if (iter -> right){
  55. // printf("8");
  56. iter = iter -> right;
  57. }
  58. else{
  59. // printf("9");
  60. iter -> right = new_node (key, iter);
  61. break;
  62. }
  63. }
  64. else{
  65. // printf("10");
  66. if (iter -> left){
  67. // printf("11");
  68. iter = iter -> left;
  69.  
  70. }
  71. else{
  72. // printf("12");
  73. iter -> left = new_node (key, iter);
  74. break;
  75. }
  76. }
  77. }
  78. }
  79. }
  80.  
  81. void output_ (node *head) {
  82. node *iter2 = head;
  83. if (iter2) {
  84. output_(iter2 -> left);
  85. printf("%d ", iter2 -> key);
  86. output_(iter2 -> right);
  87. }
  88. }
  89.  
  90. int main (void){
  91. int min, max, max_h, h=0, r;
  92. srand(time(NULL));
  93. scanf ("%d %d %d", &min, &max, &max_h);
  94. node *head = NULL;
  95.  
  96. while (k < max_h){
  97. r = randomazer (min, max);
  98. // printf ("%d ", r);
  99. add_node(&head, r);
  100. }
  101.  
  102. printf ("\n");
  103. output_(head);
  104.  
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement