2
0

02_binary_tree.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define JIM_IMPLEMENTATION
  5. #include "../jim.h"
  6. #include "fruits.h"
  7. typedef struct Node Node;
  8. struct Node {
  9. const char *value;
  10. Node *left;
  11. Node *right;
  12. };
  13. Node *generate_tree_of_fruits(size_t level_cur, size_t level_max)
  14. {
  15. if (level_cur < level_max) {
  16. // Let It Leak! Let It Leak!
  17. // Let It Leak! Oh, Let It Leak!
  18. // Memory costs nothing!
  19. // Let It Leak!
  20. Node *node = malloc(sizeof(*node));
  21. node->value = fruits[rand() % fruits_count];
  22. node->left = generate_tree_of_fruits(level_cur + 1, level_max);
  23. node->right = generate_tree_of_fruits(level_cur + 1, level_max);
  24. return node;
  25. } else {
  26. return NULL;
  27. }
  28. }
  29. void render_node_as_json(Jim *jim, Node *node)
  30. {
  31. if (node == NULL) {
  32. jim_null(jim);
  33. } else {
  34. jim_object_begin(jim);
  35. jim_member_key(jim, "value");
  36. jim_string(jim, node->value);
  37. jim_member_key(jim, "left");
  38. render_node_as_json(jim, node->left);
  39. jim_member_key(jim, "right");
  40. render_node_as_json(jim, node->right);
  41. jim_object_end(jim);
  42. }
  43. }
  44. int main()
  45. {
  46. srand(time(0));
  47. Jim jim = {0};
  48. render_node_as_json(&jim, generate_tree_of_fruits(0, 4));
  49. fwrite(jim.sink, jim.sink_count, 1, stdout);
  50. return 0;
  51. }