-
Notifications
You must be signed in to change notification settings - Fork 0
/
RBTree.h
46 lines (35 loc) · 1.59 KB
/
RBTree.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef RBTREE_H
#define RBTREE_H
#include <stdint.h>
// Цвет узла К/Ч дерева
typedef enum { RED, BLACK } color_t;
typedef struct RBNode { // Узел К/Ч дерева
uint8_t value : 6; // Поле (6 бит), для хранения букв латинского алфавита в верхнем и нижнем регистре
color_t color; // Цвета узла: RED, BLACK
struct RBNode* parent; // Предок узла
struct RBNode* left; // Левый потомок узла
struct RBNode* right; // Правый потомок узла
} RBNode;
typedef struct RBTree { // Структура К/Ч дерева
struct RBNode* root; // Корень дерева
struct RBNode* NIL; // Ограничитель (нулевой элемент)
} RBTree;
// Инициализация дерева
void initTree(RBTree* T);
// Удаление дерева
void deleteTree(RBTree* T);
// Добавление нового элемента
void add(RBTree* T, uint8_t value);
// Удаление минимального элемента
void deleteMin(RBTree* T);
// Удаление максимального элемента
void deleteMax(RBTree* T);
// Прямой обход дерева
void preOrderVisit(RBTree* T, RBNode* root);
// Симметричный обход дерева
void inOrderVisit(RBTree* T, RBNode* root);
// Обратный отход дерева
void postOrderVisit(RBTree* T, RBNode* root);
// Чтение дерева из файла
void readFile(const char* file_name, RBTree* T);
#endif