Implementación completa de un Árbol Rojo-Negro (Red-Black Tree) con visualización interactiva web. Este proyecto incluye tanto la implementación pura de la estructura de datos como una interfaz visual que permite realizar operaciones de inserción, eliminación y búsqueda de manera interactiva.
- Steve Andy Ildefonso Santos stiffis
- Bladimir Alferez Vicente bladimirAlfer
project-red-black-tree/
├── 📁 assets/
│ ├── 📁 css/
│ │ └── common-styles-responsive.css
│ └── 📁 js/
│ ├── iframeResize.js
│ └── instruction-box.js
├── 📁 rbt_operations/
│ ├── 📁 css/
│ │ └── style.css
│ ├── 📁 js/
│ │ ├── RedBlack.js
│ │ └── 📁 lib/
│ │ ├── Algorithm.js
│ │ ├── AnimatedCircle.js
│ │ ├── AnimatedLabel.js
│ │ ├── AnimatedObject.js
│ │ ├── AnimationMain.js
│ │ ├── CustomEvents.js
│ │ ├── HighlightCircle.js
│ │ ├── Line.js
│ │ ├── ObjectManager.js
│ │ └── UndoFunctions.js
│ └── redblack.html
├── 📁 redblack_tree/
│ ├── RedBlackNode.js
│ ├── RedBlackTree.js
│ └── index.js
├── LICENSE
└── README.md
Contiene la clase RedBlackNode que representa un nodo individual del árbol Red-Black.
Propiedades:
data: El valor almacenado en el nodoleft: Referencia al hijo izquierdoright: Referencia al hijo derechoparent: Referencia al nodo padrecolor: Color del nodo ('RED' o 'BLACK')isNullLeaf: Indica si es una hoja nula
Métodos principales:
isLeftChild(): Verifica si el nodo es hijo izquierdoisRightChild(): Verifica si el nodo es hijo derechogetSibling(): Obtiene el hermano del nodogetUncle(): Obtiene el tío del nodogetGrandparent(): Obtiene el abuelo del nodoisRed(): Verifica si el nodo es rojoisBlack(): Verifica si el nodo es negrosetColor(color): Establece el color del nodo
Contiene la clase RedBlackTree que implementa la estructura del árbol Red-Black.
Propiedades:
root: Nodo raíz del árbolnullLeaf: Nodo especial que representa las hojas nulas
Métodos principales:
insert(data): Inserta un nuevo valor en el árbolfixInsertion(node): Arregla las violaciones de las propiedades del árbol después de insertarrotateLeft(node): Realiza una rotación hacia la izquierdarotateRight(node): Realiza una rotación hacia la derecha
Archivo que exporta ambas clases para facilitar la importación.
Interfaz web interactiva que permite visualizar y manipular el árbol Red-Black.
Características:
- Visualización gráfica del árbol
- Operaciones de inserción, eliminación y búsqueda
- Controles de animación
- Comentarios explicativos de las operaciones
Contiene toda la lógica de visualización y animación:
- RedBlack.js: Implementación específica para la visualización
- lib/: Bibliotecas de animación y manejo de objetos gráficos
- Propiedad de Color: Cada nodo es rojo o negro
- Propiedad de Raíz: La raíz es siempre negra
- Propiedad de Hoja: Todas las hojas (NIL) son negras
- Propiedad de Nodo Rojo: Si un nodo es rojo, ambos hijos deben ser negros
- Propiedad de Camino Negro: Para cada nodo, todos los caminos simples desde el nodo hasta las hojas descendientes contienen el mismo número de nodos negros
import { RedBlackTree } from "./redblack_tree/index.js";
const tree = new RedBlackTree();
tree.insert(10);
tree.insert(5);
tree.insert(15);- Abrir
rbt_operations/redblack.htmlen un navegador web - Utilizar los controles para insertar, eliminar o buscar elementos
- Observar las animaciones que muestran cómo se mantienen las propiedades del árbol
Al pulsar Insertar, el nuevo nodo aparece en rojo y se recolorea/rota según las reglas hasta quedar en negro.
Al pulsar Eliminar, el nodo objetivo se marca, se elimina y el árbol se reequilibra aplicando rotaciones y recoloreos.
Al pulsar Buscar, el recorrido se resalta en dorado paso a paso, y el nodo encontrado queda marcado en azul.
Al pulsar Imprimir, se recorre el árbol en orden y se muestran sus valores impresos en la parte inferior.
- JavaScript ES6+: Implementación de la estructura de datos
- HTML5: Estructura de la interfaz web
- CSS3: Estilos y diseño responsive
- Canvas API: Renderizado gráfico del árbol
- jQuery: Manipulación del DOM y animaciones
# Clonar el repositorio
git clone https://github.com/stiffis/project-red-black-tree.git
# Navegar al directorio del proyecto
cd project-red-black-tree
# Abrir la visualización en el navegador
open rbt_operations/redblack.html- Inserción: O(log n)
- Eliminación: O(log n)
- Búsqueda: O(log n)
- Espacio: O(n)
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia GPL v3. Consulta el archivo LICENSE para más detalles.



