#ifndef BINARY_TREE_H #define BINARY_TREE_H #include typedef struct _tree_node { int data; struct _tree_node *left; struct _tree_node *right; } TreeNode; TreeNode *create_tree_node(int data); void preorder(TreeNode *root); void inorder(TreeNode *root); void postorder(TreeNode *root); void level_order(TreeNode *root); int size_tree(TreeNode *root); int height_tree(TreeNode *root); int count_leaves(TreeNode *root); bool is_empty_tree(TreeNode *root); bool is_leaf(TreeNode *node); bool attach_left(TreeNode *parent, int data); bool attach_right(TreeNode *parent, int data); void destroy_tree(TreeNode *root); TreeNode *mirror_tree(TreeNode *root); TreeNode *bst_insert(TreeNode *root, int data); bool bst_search(TreeNode *root, int data); TreeNode *bst_delete(TreeNode *root, int data); TreeNode *bst_find_min(TreeNode *root); TreeNode *bst_find_max(TreeNode *root); #endif