Un proyecto Java para la implementación y manejo sencillo de árboles n-arios, con visión futura de expandirse a otros tipos de grafos.
- Descripción General
- Estructura del Proyecto
- Clases Principales
- Ejemplo de Uso
- Métodos Implementados
- Limitaciones Actuales
- Futuras Implementaciones
Este proyecto proporciona una implementación flexible de árboles n-arios en Java, diseñada para ser fácil de usar y extender. El objetivo principal es facilitar la creación, navegación y manipulación de estructuras de árbol, con planes de expandir la funcionalidad a otros tipos de grafos en el futuro.
.
├── Main.java # Clase principal con ejemplos de uso
├── tree/
│ ├── ExtendedNode.java # Implementación de nodos del árbol
│ ├── ExtendedTree.java # Implementación del árbol n-ario
│ └── SuperExtendedNode.java # Extensión futura (actualmente vacía)
└── context.py # Script utilitario para documentación
Clase que representa un nodo en el árbol n-ario con funcionalidades extendidas para navegación y gestión.
- Genérica: Soporta cualquier tipo de dato (
E) - Bidireccional: Mantiene referencia al padre y a los hijos
- Iteradores Múltiples: Incluye iteradores numéricos y nativos
- Estados definidos: Raíz, nodo interno y hoja
| Método | Descripción | Estado |
|---|---|---|
isRoot() |
Verifica si el nodo es raíz | ✅ Implementado |
isLeaf() |
Verifica si el nodo es hoja | ✅ Implementado |
addChildNode() |
Añade un nodo hijo | ✅ Implementado |
removeChildNode() |
Elimina un nodo hijo | ✅ Implementado |
nextChildNode() |
Obtiene el siguiente hijo | ✅ Implementado |
hasNextChildNode() |
Verifica si hay más hijos | ✅ Implementado |
resetIterators() |
Reinicia los iteradores | ✅ Implementado |
Clase principal que gestiona el árbol completo y proporciona algoritmos de recorrido.
| Método | Descripción | Estado |
|---|---|---|
getValuesInPreOrder() |
Recorrido pre-orden | |
getRootNode() |
Obtiene nodo raíz | ✅ Implementado |
nextNodePreOrder() |
Navegación pre-orden |
// Crear árbol y nodos
ExtendedTree<Integer> tree = new ExtendedTree<>();
ExtendedNode<Integer> root = tree.getRootNode();
root.setActualNodeValue(1);
// Construir estructura del árbol:
// 1
// / \
// 2 3
// / \ \
// 4 5 6
// Configurar nodos hijos
ExtendedNode<Integer> node2 = new ExtendedNode<>();
node2.setActualNodeValue(2);
root.addChildNode(node2);
node2.setParentNode(root);
// Recorrido Pre-Orden
LinkedList<Integer> preOrderResult = tree.getValuesInPreOrder();
System.out.println("Resultado PreOrden: " + preOrderResult);
// Esperado: [1, 2, 4, 5, 3, 6]- Creación de estructura: Construcción completa del árbol con relaciones padre-hijo
- Navegación básica: Movimiento entre nodos padres e hijos
- Verificación de estado: Identificación de raíces, hojas y nodos internos
- Gestión de hijos: Adición y eliminación de nodos hijos
- Iteración básica: Navegación secuencial sobre los hijos
- Recorrido Pre-Orden: Funciona pero con limitaciones en árboles complejos
- Gestión de iteradores: Requiere reset manual en algunos casos
- Recorridos In-Order y Post-Order
- Búsqueda y filtrado de nodos
- Serialización/Deserialización
- Balanceo del árbol
- Algoritmos de búsqueda avanzada
- Recorridos Incompletos: Solo Pre-Orden está parcialmente implementado
- Manejo de Errores: Limitada validación de condiciones de error
- Iteradores: Pueden requerir reset manual en operaciones complejas
- Eficiencia: No optimizado para árboles muy grandes
- Concurrencia: No thread-safe
-
Tipos de Grafos Adicionales:
- Árboles binarios
- Grafos dirigidos y no dirigidos
- Grafos ponderados
-
Algoritmos de Recorrido:
- Recorrido In-Order y Post-Order
- Búsqueda en profundidad (DFS)
- Búsqueda en anchura (BFS)
-
Funcionalidades Avanzadas:
- Serialización JSON/XML
- Algoritmos de balanceo
- Búsqueda por criterios
- Operaciones de sub-árbol
-
Mejoras de API:
- Builder pattern para construcción
- Operaciones funcionales (Stream API)
- Manejo de errores mejorado
Este proyecto es ideal para:
- Aprendizaje de estructuras de árboles
- Prototipado rápido de algoritmos arbóreos
- Proyectos educativos
- Casos donde la simplicidad es más importante que el rendimiento extremo
Las contribuciones son bienvenidas, especialmente en:
- Implementación de recorridos faltantes
- Mejora del manejo de iteradores
- Adición de tests unitarios
- Optimización de rendimiento
Nota: Este proyecto está en desarrollo activo. Se recomienda verificar la rama principal para las últimas actualizaciones y características implementadas.