Los árboles rojinegros son una variante de los árboles binarios de búsqueda que se utilizan para mantener el árbol equilibrado y garantizar un rendimiento óptimo en las operaciones de inserción, eliminación y búsqueda. Un árbol rojinegro cumple con las siguientes propiedades:
Para mantener estas propiedades y garantizar que el árbol siempre esté equilibrado, se realizan rotaciones y se cambian los colores de los nodos cuando se insertan o eliminan elementos del árbol. Esto permite que el árbol siempre tenga una altura logarítmica en función del número de nodos, lo que significa que las operaciones de inserción, eliminación y búsqueda tienen una complejidad de O(log n).
- #include <iostream>
- const bool RED = true;
- const bool BLACK = false;
- struct Node {
- int data;
- bool color;
- Node *left, *right, *parent;
- Node(int data) : data(data) {
- color = RED;
- left = right = parent = nullptr;
- }
- };
- class RedBlackTree {
- private:
- Node *root;
- Node *nil;
- public:
- RedBlackTree() {
- nil = new Node(0);
- nil->color = BLACK;
- nil->left = nil->right = nil->parent = nil;
- root = nil;
- }
- void LeftRotate(Node *&, Node *&);
- void RightRotate(Node *&, Node *&);
- void InsertFixup(Node *&, Node *&);
- void Insert(Node *&, Node *&, int);
- void Inorder(Node *&);
- void LevelOrder(Node *&);
- };
Link de apoyo
Siguiente tema:
Sement Tree e Interval Tree >>