Abrir el simulador
Hilos al sucesor y al predecesor en inorden, y recorrido del árbol en Java sin recursión ni pila.
null. Un árbol enhebrado aprovecha esos enlaces vacíos como hilos que apuntan al nodo siguiente o anterior en inorden. Así se puede recorrer el árbol en orden sin recursión y sin pila, y encontrar el sucesor de cualquier nodo sin volver a la raíz.
Lo que vas a aprender
- Cuántos enlaces vacíos tiene un árbol binario.
- Qué es un hilo derecho y un hilo izquierdo.
- Cómo se distinguen hijos e hilos.
- El recorrido en inorden e inorden inverso con hilos.
Cómo se usa el simulador
- Escribe los valores en orden de inserción (árbol de búsqueda) y pulsa Construir, o elige un árbol equilibrado, degenerado, irregular o 🎲 al azar.
- Elige el recorrido: inorden o inorden inverso, y qué hilos dibujar: derechos, izquierdos o ambos.
- Avanza con ⏮, ◀, ▶ Recorrer, ▶ y ⏭. Se resaltan el nodo actual, el hilo por el que se salta y la línea del código Java, y se van apuntando los nodos visitados.
Fundamentos teóricos
Enlaces vacíos
En un árbol binario de nodos hay referencias (izquierda y derecha de cada nodo). Como cada nodo salvo la raíz tiene un padre, referencias apuntan a hijos y sonnull.
Hilos
- Hilo derecho: si un nodo no tiene hijo derecho, su enlace derecho apunta a su sucesor en inorden.
- Hilo izquierdo: si no tiene hijo izquierdo, su enlace izquierdo apunta a su predecesor.
null.
Marcas
Cada nodo guarda dos booleanos para saber si cada enlace es un hijo o un hilo:Recorrido en inorden sin pila
- Empieza por el nodo más a la izquierda (el menor).
- Tras visitar un nodo: si su enlace derecho es un hilo, salta por él; si es un hijo, baja a ese subárbol hasta su nodo más a la izquierda.
Coste
El recorrido completo es y no usa memoria extra (ni pila ni recursión), frente al de pila del recorrido recursivo, donde es la altura.Ejemplos resueltos
Ejemplo 1 · Hilos derechos
Ejemplo 1 · Hilos derechos
Árbol de búsqueda con 50, 30, 70, 20, 40, 60 y 80. Inorden: 20, 30, 40, 50, 60, 70, 80.Hilos derechos (nodos sin hijo derecho): 20 → 30, 40 → 50, 60 → 70 y 80 →
null.Ejemplo 2 · Hilos izquierdos
Ejemplo 2 · Hilos izquierdos
En el mismo árbol, los nodos sin hijo izquierdo son las hojas: 20 →
null, 40 → 30, 60 → 50 y 80 → 70.Ejemplo 3 · Enlaces vacíos
Ejemplo 3 · Enlaces vacíos
7 nodos: enlaces, a hijos y vacíos, que se convierten en hilos (dos de ellos quedan a
null).Experimenta con el simulador
1
Seguir el hilo
Recorre el árbol equilibrado y fíjate en cuándo salta por un hilo y cuándo baja a un subárbol.
2
Árbol degenerado
Con el árbol degenerado, ¿cuántos hilos hay? ¿Cómo es el recorrido?
3
Inverso
Cambia al inorden inverso y comprueba que salen de mayor a menor.
Errores frecuentes
- Confundir un hilo con un hijo si no se miran las marcas.
- Pensar que el hilo derecho apunta al padre. Apunta al sucesor en inorden, que puede ser un antepasado más lejano.
Herramientas relacionadas
Estructuras de datos
Árbol binario de búsqueda y recorridos.
Recursión
El recorrido recursivo y su pila.
ArrayList y lista enlazada
Nodos y referencias en Java.