fork download
  1. //(c)Terminator
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <malloc.h>
  5.  
  6.  
  7. typedef struct _bstree {
  8. int val;
  9. struct _bstree* left;
  10. struct _bstree* right;
  11. } bstree;
  12.  
  13. static int add(bstree** tr, int n);
  14. static void clear(bstree* tr);
  15. static void print(FILE* _o, const bstree* p, int n);
  16.  
  17.  
  18. int main(void){
  19. int i;
  20. bstree* tr = NULL;
  21.  
  22. for(i = 0; i < 20; ++i)
  23. add(&tr, rand() % 40);
  24.  
  25. print(stdout, tr, 20);
  26. clear(tr);
  27. return 0;
  28. }
  29.  
  30.  
  31.  
  32. //добавление элемента в дерево
  33. static int add(bstree** tr, int n){
  34. bstree* p = *tr;
  35. while(p != NULL){
  36. if(n < p->val){
  37. tr = &p->left;
  38. p = p->left;
  39. } else {
  40. if(n == p->val)
  41. return 0;
  42. tr = &p->right;
  43. p = p->right;
  44. }
  45. }
  46.  
  47. p = (bstree*)malloc(sizeof(bstree));
  48. if(p != NULL){
  49. p->left = p->right = NULL;
  50. p->val = n;
  51. *tr = p;
  52. }
  53. return (p != NULL);
  54. }
  55.  
  56.  
  57. //удаление всего дерева
  58. static void clear(bstree* tr){
  59. if(tr != NULL){
  60. if(tr->left != NULL)
  61. clear(tr->left);
  62. if(tr->right != NULL)
  63. clear(tr->right);
  64. free(tr);
  65. }
  66. }
  67.  
  68.  
  69. static void print(FILE* _o, const bstree* p, int n){
  70. int i;
  71. if(p != NULL){
  72. for(i = 0; i <= n; ++i)
  73. fputc(' ', _o);
  74. fprintf(_o, "%d\n", p->val);
  75.  
  76. if(p->left != NULL)
  77. print(_o, p->left, n - 1);
  78. if(p->right != NULL)
  79. print(_o, p->right, n + 1);
  80. }
  81. }
  82.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
                     23
                    6
                   2
                    3
                     17
                    15
                   12
                  9
                   10
                     16
                      21
                     19
                      20
                      35
                     33
                    26
                     27