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

java.lang.Object
  extended by uoc.ei.tads.ArbolBinario.RecorridoOrdenBasico<E>
All Implemented Interfaces:
java.io.Serializable, Recorrido<E>
Direct Known Subclasses:
ArbolBinario.RecorridoInorden, ArbolBinario.RecorridoPreorden
Enclosing class:
ArbolBinario<E>

protected abstract static class ArbolBinario.RecorridoOrdenBasico<E>
extends java.lang.Object
implements Recorrido<E>

Clase que proporciona el comportamiento básico para los tres recorridos preorden, inordre y postorden. En esta clase se define el comportamiento común a los tres recorridos, de manera que posteriormente únicamente habrá que definir, para cada recorrido concreto, el método siguiente.

See Also:
Recorrido.haySiguiente(), Recorrido.siguiente(), Serialized Form

Field Summary
protected  ArbolBinario<E> arbol
          El arbol que se está recorriendo.
protected  Pila<Posicion<E>> pila
          Pila auxiliar.
 
Constructor Summary
ArbolBinario.RecorridoOrdenBasico(ArbolBinario<E> arbol)
          Constructor.
 
Method Summary
protected abstract  void apilaDescendientesConMasPrioridad(Posicion<E> padre)
          Este método apila los descendientes de un nodo que han de aparecer antes de que él en el recorrido del arbol.
protected abstract  void apilaDescendientesConMenosPrioridad(Posicion<E> padre)
          Este método apila los descendientes de un nodo que han de aparecer después de que él en el recorrido del arbol.
 boolean haySiguiente()
          Comprueba si hay una primera o siguiente posición.
 Posicion<E> siguiente()
          Primero avanza, si se puede, y después retorna la posición.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

arbol

protected ArbolBinario<E> arbol
El arbol que se está recorriendo.


pila

protected Pila<Posicion<E>> pila
Pila auxiliar. Esta pila guarda los elementos que hemos tratado pero que aún no hemos recorrido. La cima de la pila siempre debe tener el siguiente elemento a recorrer. Todos los tres recorridos pre/in/post se pueden ver de la siguiente manera: dado un nodo, este tiene un conjunto de descendientes que aparecerán antes de que él en el recorrido (son más prioritarios) y un conjunto de descendientes que aparecerán después de él en el recorrido (son menos prioritarios).

Constructor Detail

ArbolBinario.RecorridoOrdenBasico

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

Parameters:
arbol - El árbol a recorrer.
Method Detail

apilaDescendientesConMasPrioridad

protected abstract void apilaDescendientesConMasPrioridad(Posicion<E> padre)
Este método apila los descendientes de un nodo que han de aparecer antes de que él en el recorrido del arbol. Esta característica diferencia los tres recorridos preorden, inordre y postorden. Por lo tanto, el método esta definido en esta clase como abstracto y debe ser definido en las clases derivadas de la manera pertinente. El resto de métodos que implementan el recorrido se pueden definir en esta misma clase en base a este método abstracto.


apilaDescendientesConMenosPrioridad

protected abstract void apilaDescendientesConMenosPrioridad(Posicion<E> padre)
Este método apila los descendientes de un nodo que han de aparecer después de que él en el recorrido del arbol. Esta característica es el otro característica que diferencia los tres recorridos preorden, inordre y postorden. Por lo tanto, el método está definido en esta clase como abstracto y debe ser definido en las clases derivadas de la manera pertinente. El resto de métodos que implementan el recorrido se pueden definir en esta misma clase en base a este método abstracto.


haySiguiente

public boolean haySiguiente()
Comprueba si hay una primera o siguiente posición. Es sensible a eventuales alteraciones de la estructura de posiciones. Retorna falso si el contenedor está vacío o ya se ha visitado la última posición.

Specified by:
haySiguiente in interface Recorrido<E>
Returns:
cierto o falso, según si se puede avanzar o no se puede

siguiente

public Posicion<E> siguiente()
Primero avanza, si se puede, y después retorna la posición. Si no hay siguiente posición lanza una excepción.

Specified by:
siguiente in interface Recorrido<E>
Returns:
siguiente posición