#include #include #include #include "binary_search_tree.h" void free_tree(node_t *tree) { if (tree == NULL) { return; } free_tree(tree->left); free_tree(tree->right); free(tree); } int *sorted_data(node_t *tree) { if (tree == NULL) { return NULL; } size_t num_nodes = 0; node_t *current = tree; while (current != NULL) { num_nodes++; current = current->right; } int *sorted_array = (int *)malloc(num_nodes * sizeof(int)); if (sorted_array == NULL) { return NULL; } size_t index = 0; node_t *current_node = tree; while (current_node != NULL) { if (current_node->left == NULL) { sorted_array[index++] = current_node->data; current_node = current_node->right; } else { node_t *predecessor = current_node->left; while (predecessor->right != NULL && predecessor->right != current_node) { predecessor = predecessor->right; } if (predecessor->right == NULL) { predecessor->right = current_node; current_node = current_node->left; } else { predecessor->right = NULL; sorted_array[index++] = current_node->data; current_node = current_node->right; } } } return sorted_array; } node_t *build_tree(int *tree_data, size_t tree_data_len) { if (tree_data == NULL || tree_data_len == 0) { return NULL; } node_t *koren = (node_t *)malloc(sizeof(node_t)); if (koren == NULL) { return NULL; } koren->data = tree_data[0]; koren->left = NULL; koren->right = NULL; if (tree_data_len > 1) { koren->left = build_tree(tree_data + 1, tree_data_len - 1); } return koren; }