-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRBTree.hpp
97 lines (79 loc) · 1.95 KB
/
RBTree.hpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#pragma once
#ifndef RBTREE_H
#define RBTREE_H
/// @brief Öâåò óçëà.
enum class Color
{
Red,
Black,
DoubleBlack
};
/// @brief Óçåë Êðàñíî-÷åðíîãî äåðåâà.
struct Node
{
int Data;
Color Color = Color::Red;
Node* Left = nullptr;
Node* Right = nullptr;
Node* Parent = nullptr;
};
/// @brief Êðàñíî-÷åðíîå äåðåâî.
struct RBTree
{
Node* Root = nullptr;
};
/// @brief Ëåâûé ïîâîðîò âîêðóã node.
/// @param root Êîðåíü
/// @param node Óçåë.
void RotateLeft(Node*& root, Node*& node);
/// @brief Ïðàâûé ïîâîðîò âîêðóã node.
/// @param root Êîðåíü
/// @param node Óçåë.
void RotateRight(Node*& root, Node*& node);
/// @brief Áàëàíñèðîâêà âñòàâêè.
/// @param root Êîðåíü.
/// @param node Âñòàâëÿåìûé óçåë.
void FixInsertRBTree(Node*& root, Node*& node);
/// @brief Áàëàíñèðîâêà óäàëåíèÿ.
/// @param root Êîðåíü.
/// @param node Óäàëÿåìûé óçåë.
void FixDeleteRBTree(Node*& root, Node*& node);
/// @brief Ïîëó÷èòü öâåò.
/// @param node Óçåë.
/// @return Öâåò.
Color GetColor(Node* node);
/// @brief Óñòàíîâèòü Öâåò.
/// @param node Óçåë.
/// @param color Öâåò.
void SetColor(Node*& node, Color color);
/// @brief Âñòàâêà çíà÷åíèÿ.
/// @param root Êîðåíü
/// @param value Çíà÷åíèå.
void InsertValue(Node*& root, int value);
/// @brief Âñòàâêà.
/// @param root Êîðåíü.
/// @param node Óçåë.
/// @return Êîðåíü.
Node* InsertNode(Node*& root, Node*& node);
/// @brief Óäàëåíèå.
/// @param root Êîðåíü.
/// @param data Çíà÷åíèå.
/// @return Êîðåíü.
Node* DeleteNode(Node*& root, int data);
/// @brief Óäàëåíèå ïî çíà÷åíèþ.
/// @param root Êîðåíü
/// @param data Çíà÷åíèå.
void DeleteValue(Node*& root, int data);
/// @brief Ìèíèìàëüíîå çíà÷åíèå.
/// @param node Óçåë.
/// @return Óçåë ñ ìèíèìàëüíûì çíà÷åíèåì.
Node* MinValueNode(Node*& node);
/// @brief Ïîèñê.
/// @param node Óçåë.
/// @param data Çíà÷åíèå.
/// @return Óçåë ñ çíà÷åíèåì data.
Node* Find(Node* node, int data);
/// @brief Óäàëåíèå äåðåâà.
/// @param node Óçåë.
void FreeTree(Node* node);
#endif //RBTREE_H