Temas:
Un árbol binario es un árbol en el que de cada nodo cuelgan a los más dos árboles binarios.
Un árbol de búsqueda binaria (ABB) es un árbol binario que almacena en cada nodo una llave. El árbol de búsqueda binaria cumple las siguientes propiedades:
Cuando el arreglo está vacío, la raíz es nula y representa entonces
el árbol vacío. Cuando el arreglo tiene al menos una asociación,
la raíz no es nula y referencia un objeto de la clase Nodo que
se define como:
class Map extends Program {
Nodo raiz= null;
... operaciones del arreglo asociativo ...
}
En donde izq referencia la raíz del ABB izquierdo, o nulo si el ABB
vacío, y der referencia respectivamente el ABB derecho. Un nodo
almacena una asociación (llave, valObj), al igual que en una lista
enlazada un eslabón almacena un asociación del arreglo asociativo.
class Nodo {
int llave;
Objecto valObj;
Nodo izq;
Nodo der;
Nodo(int llave, Object valObj, Nodo izq, Nodo der) {
this.llave= llave;
this.valObj= valObj;
this.izq= izq;
this.der= der;
}
}
La siguiente figura dos posibles representaciones de un arreglo asociativo con asociaciones {3->"hola", 5->"que", 10->"tal}:
La siguiente figura muestra gráficamente el funcionamiento de este
método:
Object get(int llave) {
return buscar(llave, raiz);
}
private Object buscar(int llave, Nodo nodo) {
if (nodo==null) {
fatalError("La llave no existe en el arreglo");
return null;
}
else if (llave==nodo.llave)
return nodo.valObj;
else if (llave<nodo.llave)
return buscar(llave, nodo.izq);
else
return buscar(llave, nodo.der);
}
Versión iterativa:
Ejercicio: Implemente el método isMapped. Revise la clase
anterior para obtener la especificación del comportamiento de este método.
Object get(int llave) {
Nodo nodo= raiz;
while (nodo!=null) {
if (nodo.llave==llave)
return nodo.valObj;
if (nodo.llave<llave)
nodo= nodo.izq;
else
nodo= nodo.der;
}
fatalError("La llave no existe en el arreglo");
return null;
}