uoc.ei.tads
Class ArbolBinario.RecorridoPostorden<E>

java.lang.Object
  extended by uoc.ei.tads.ArbolBinario.RecorridoOrdenBasico<E>
      extended by uoc.ei.tads.ArbolBinario.RecorridoInorden<E>
          extended by 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

Field Summary
 
Fields inherited from class uoc.ei.tads.ArbolBinario.RecorridoOrdenBasico
arbol, pila
 
Constructor Summary
ArbolBinario.RecorridoPostorden(ArbolBinario<E> arbol)
          Constructor.
 
Method Summary
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.
protected  void apilaDescendientesConMenosPrioridad(Posicion<E> padre)
          Los descendientes con menos prioridad para el caso del recorrido inorden son el hijo derecho y sus descendientes.
 Posicion<E> siguiente()
          Esta clase reaprovecha las prioridades establecidas por el recorrido inorden y modifica el método siguiente.
protected  boolean yaDesplegadoTotalmente(Posicion<E> nodo)
           
 
Methods inherited from class uoc.ei.tads.ArbolBinario.RecorridoOrdenBasico
haySiguiente
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ArbolBinario.RecorridoPostorden

public ArbolBinario.RecorridoPostorden(ArbolBinario<E> arbol)
Constructor.

Parameters:
arbol - El arbol a recorrer.
Method Detail

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)