uoc.ei.tads
Class ArbolBinario.RecorridoPostorden<E>
java.lang.Object
uoc.ei.tads.ArbolBinario.RecorridoOrdenBasico<E>
uoc.ei.tads.ArbolBinario.RecorridoInorden<E>
uoc.ei.tads.ArbolBinario.RecorridoPostorden<E>
- All Implemented Interfaces:
- java.io.Serializable, Recorrido<E>
- Enclosing class:
- ArbolBinario<E>
protected static class ArbolBinario.RecorridoPostorden<E>
- extends ArbolBinario.RecorridoInorden<E>
Clase que proporciona un recorrido de las posiciones. Basada en el
pattern Iterator, soporta múltiples recorridos simultáneos y
independientes del contenedor. Es sensible a eventuales alteraciones de
la estructura de posiciones.
- See Also:
Recorrido.haySiguiente()
,
Recorrido.siguiente()
,
Serialized Form
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ArbolBinario.RecorridoPostorden
public ArbolBinario.RecorridoPostorden(ArbolBinario<E> arbol)
- Constructor.
- Parameters:
arbol
- El arbol a recorrer.
apilaDescendientesConMasPrioridad
protected void apilaDescendientesConMasPrioridad(Posicion<E> padre)
- Redefinición de este método para tener en cuenta los descendientes
con menos prioridad del último nodo de la rama izquierda.
- Overrides:
apilaDescendientesConMasPrioridad
in class ArbolBinario.RecorridoInorden<E>
apilaDescendientesConMenosPrioridad
protected void apilaDescendientesConMenosPrioridad(Posicion<E> padre)
- Los descendientes con menos prioridad para el caso del recorrido
inorden son el hijo derecho y sus descendientes. Por lo tanto,
apilamos el hijo derecho. Acto seguido pasamos a apilar los descendientes
del hijo derecho que tienen más prioridad que este.
- Overrides:
apilaDescendientesConMenosPrioridad
in class ArbolBinario.RecorridoInorden<E>
siguiente
public Posicion<E> siguiente()
- Esta clase reaprovecha las prioridades establecidas por el recorrido
inorden y modifica el método siguiente. La modificación consiste en
apilar los elementos con menos prioridad del nodo que queda en la cima
de la pila después de desamontonar el actual.
Es decir, lo que estamos haciendo es cambiar el significado de los métodos
apilaDescendientesConMas/MenosPrioridad para reaprovechar el máximo
código posible. En esta clase todos los descendientes de un nodo
tienen más prioridad que este. Entonces dividimos sus descendientes
en dos grupos: los que tienen más prioridad (hijo izquierdo y descendientes)
y los que tienen menos (hijo derecho y descendientes).
Si quisiéramos respetar la estructura definida en la clase base acabaríamos
teniendo una pila que inicialmente tendría todos los nodos del arbol.
- Specified by:
siguiente
in interface Recorrido<E>
- Overrides:
siguiente
in class ArbolBinario.RecorridoOrdenBasico<E>
- Returns:
- siguiente posición
yaDesplegadoTotalmente
protected boolean yaDesplegadoTotalmente(Posicion<E> nodo)