-
Notifications
You must be signed in to change notification settings - Fork 0
/
red_black_tree.h
32 lines (26 loc) · 1.24 KB
/
red_black_tree.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdbool.h>
#ifndef _RED_BLACK_TREE_H_
#define _RED_BLACK_TREE_H_
/* Red black trees are a kind of self-balancing binary search tree. Each node
stores an extra bit representing "color" (red or black) that is used to ensure
that the tree remains balanced during insertions and deletions. */
typedef struct RBTNode {
int item;
enum {black, red} color; /* 0 black 1 red */
struct RBTNode *parent;
struct RBTNode *left;
struct RBTNode *right;
} RBTNode;
/* Operations: Create, insert, search, delete, inorder traversal, preorder traversal
postorder traversal */
extern bool insert_RedBlackTree(RBTNode **tree, int value);
extern RBTNode* search_RedBlackTree(RBTNode *tree, int value);
extern RBTNode* minimum_RedBlackTree(RBTNode *tree);
extern RBTNode* maximum_RedBlackTree(RBTNode *tree);
extern RBTNode* deleteValue_RedBlackTree(RBTNode **root, int value);
extern int height_RedBlackTree(RBTNode *tree);
extern void print_RedBlackTree(RBTNode *tree, int row);
extern void inOrderTraversal_RedBlackTree(RBTNode *tree, void (*callback)(RBTNode node));
extern void preOrderTraversal_RedBlackTree(RBTNode *tree, void (*callback)(RBTNode node));
extern void postOrderTraversal_RedBlackTree(RBTNode *tree, void (*callback)(RBTNode node));
#endif