binary_tree.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /*!
  2. Temelia - Binary tree implementation source file.
  3. Copyright (C) 2008, 2009 Ceata (http://ceata.org/proiecte/temelia).
  4. @author Dascalu Laurentiu
  5. This program is free software; you can redistribute it and
  6. modify it under the terms of the GNU General Public License
  7. as published by the Free Software Foundation; either version 3
  8. of the License, or (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  16. */
  17. #include "include/binary_tree.h"
  18. #include "include/common.h"
  19. #include "include/stack.h"
  20. stack_t iterating_handlers = (stack_t) 0;
  21. stack_t compare_stack = (stack_t) 0;
  22. // one to one methods calling. Wrapper over internal binary tree methods.
  23. binary_tree_t binary_tree_new(void *key)
  24. {
  25. return _binary_tree_new(key);
  26. }
  27. void binary_tree_delete_node(binary_tree_node_t node)
  28. {
  29. _binary_tree_delete_node(node);
  30. }
  31. void binary_tree_delete(binary_tree_t tree)
  32. {
  33. _binary_tree_delete(tree);
  34. }
  35. int binary_tree_compare_trees(binary_tree_t bt1, binary_tree_t bt2,
  36. int compare(void *x, void *y, void *context), void *context)
  37. {
  38. return _binary_tree_compare_trees(bt1, bt2, compare, context);
  39. }
  40. int binary_tree_is_empty(binary_tree_t tree)
  41. {
  42. return _binary_tree_is_empty(tree);
  43. }
  44. int binary_tree_is_leaf(binary_tree_t node)
  45. {
  46. return _binary_tree_leaf(node);
  47. }
  48. int binary_tree_get_size(binary_tree_t tree)
  49. {
  50. return _binary_tree_get_size(tree);
  51. }
  52. binary_tree_t binary_tree_get_root(binary_tree_t node)
  53. {
  54. return _binary_tree_get_root(node);
  55. }
  56. void *binary_tree_get_key(binary_tree_t node)
  57. {
  58. return _binary_tree_get_key(node);
  59. }
  60. void binary_tree_set_key(binary_tree_t node, void *key)
  61. {
  62. _binary_tree_set_key(node, key);
  63. }
  64. binary_tree_t binary_tree_get_parent(binary_tree_t node)
  65. {
  66. return _binary_tree_get_parent(node);
  67. }
  68. void binary_tree_set_parent(binary_tree_t node, binary_tree_t parent, int dir)
  69. {
  70. _binary_tree_set_parent(node, parent, dir);
  71. }
  72. binary_tree_t binary_tree_get_left_child(binary_tree_t node)
  73. {
  74. return _binary_tree_get_left_child(node);
  75. }
  76. void binary_tree_set_left_child(binary_tree_t node, binary_tree_t child)
  77. {
  78. _binary_tree_set_left_child(node, child);
  79. }
  80. binary_tree_t binary_tree_get_right_child(binary_tree_t node)
  81. {
  82. return _binary_tree_get_right_child(node);
  83. }
  84. void binary_tree_set_right_child(binary_tree_t node, binary_tree_t child)
  85. {
  86. _binary_tree_set_right_child(node, child);
  87. }
  88. void binary_tree_join(binary_tree_t parent, binary_tree_t left,
  89. binary_tree_t right)
  90. {
  91. _binary_tree_join(parent, left, right);
  92. }
  93. void binary_tree_split(binary_tree_t parent, binary_tree_t *left,
  94. binary_tree_t *right)
  95. {
  96. _binary_tree_split(parent, left, right);
  97. }
  98. binary_tree_t binary_tree_create_node(binary_tree_t parent, binary_tree_t left,
  99. binary_tree_t right, void *key, int dir)
  100. {
  101. return _binary_tree_create_node(parent, left, right, key, dir);
  102. }
  103. int binary_tree_get_height(binary_tree_t tree)
  104. {
  105. return _binary_tree_get_height(tree);
  106. }
  107. int binary_tree_get_depth(binary_tree_t node)
  108. {
  109. return _binary_tree_get_depth(node);
  110. }
  111. void binary_tree_preorder(binary_tree_t tree, void key_handler(void *key,
  112. void *context), void *context)
  113. {
  114. _binary_tree_preorder(tree, key_handler, context);
  115. }
  116. void binary_tree_inorder(binary_tree_t tree, void key_handler(void *key,
  117. void *context), void *context)
  118. {
  119. _binary_tree_inorder(tree, key_handler, context);
  120. }
  121. void binary_tree_reverse_inorder(binary_tree_t tree, void key_handler(
  122. void *key, void *context), void *context)
  123. {
  124. _binary_tree_reverse_inorder(tree, key_handler, context);
  125. }
  126. void binary_tree_postorder(binary_tree_t tree, void key_handler(void *key,
  127. void *context), void *context)
  128. {
  129. _binary_tree_postorder(tree, key_handler, context);
  130. }
  131. void binary_tree_level_order(binary_tree_t tree, void key_handler(void *key,
  132. void *context), void *context)
  133. {
  134. _binary_tree_level_order(tree, key_handler, context);
  135. }
  136. void binary_tree_show_indented(binary_tree_t tree, void key_handler(void *key,
  137. int level, void *context), void *context)
  138. {
  139. _binary_tree_show_indented(tree, key_handler, context, 0);
  140. }