#ifndef INC_LIB_ALGO_AVL_TREE_H #define INC_LIB_ALGO_AVL_TREE_H #include #include #include #include #include #define AvlHeight_t uint8_t typedef bool_t (*AvlComparator)(void*, void*); typedef struct AVLNode { void* data; AvlComparator compare; struct AVLNode* left; struct AVLNode* right; AvlHeight_t height; } AVLNode; // Get the height of an AVL node AvlHeight_t get_height(AVLNode* node); // Get the Maximum Height between two AvlHeight_t max_height(AvlHeight_t a, AvlHeight_t b); // Get the balance factor of a node ssize_t get_balance_factor(AVLNode* node); // Rotate an AVL node right AVLNode* right_rotate(AVLNode* parent); // Rotate an AVL node left AVLNode* left_rotate(AVLNode* parent); // Create AVL node AVLNode* create_avl_node(void* data, AvlComparator compare); // Insert data into AVL tree Result avl_insert(AVLNode* node, void* data, AvlComparator compare); // In-order traversal print pointer void print_in_order(AVLNode* root); // Free avl tree nodes starting at root void free_avl_tree(AVLNode* root); // Free avl tree and their data starting at root void free_avl_tree_nodes(AVLNode* root); #endif