¿Cómo puedo implementar un árbol binario de búsqueda polimórfico (que hace uso de EmptyTree y NonEmptyTree) sin necesidad de utilizar downcasting o una clase de cheques?
java árbol de búsqueda binaria polimórfica
Crear una interfaz común, tales como:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
A continuación, proporcionar clases que implementan la interfaz común:
class EmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K key) {
// ...
}
}
class NonEmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K searchKey) {
// ...
}
}
Su aplicación para la EmptyTree siempre indicará un fallo en la búsqueda del elemento (ya sea mediante la devolución de nulo o lanzando una excepción), mientras que su implementación de NonEmptyTree o bien volver en sí (si la búsqueda siempre partidos clave) o delegar a la izquierda oa subárboles derecho. Debido a que siempre existirá el subárbol izquierdo o derecho (O bien será un NonEmptyTree o un EmptyTree), la clase "NonEmptyTree" puede referirse simplemente a sus hijos a través de la interfaz común y se basan en el hecho de que el tipo de ejecución va a hacer lo correcto (lo que no es necesario hacer ninguna comprobación de fundición o el tipo de los niños en la implementación del algoritmo).
El único lugar donde se necesita saber el tipo de ejecución es cuando se construye los niños.













