*-------*
T ---> T ---> | X | nodo raiz
*-------*
* *
/| |\ X = Identificador
/ | | \
/ | | \
subarbol isquierdo / | | \ subarbol derecho
/ | | \
/ | | \
/ | | \
/ | | \
*--------* *--------*
*-------* *-------* *-------*
T ---> | if | T ---> | if | T ---> | if |
*-------* *-------* *-------*
| | | | | |
+---------+ +---------+ +---------+ +---------+ +-----+ +-----+
| | | | | |
*-------* *-------* *-------* *-------* *-------* *-------*
| for | | while | | for | |repeat | | do | | stop |
*-------* *-------* *-------* *-------* *-------* *-------*
| | |
+---+ +-----+ +-----+
| | |
*-------* *-------* *-------*
|repeat | | loop | | while |
*-------* *-------* *-------*
|
+---+
|
*-------*
| loop |
*-------*
BST 1 BST 2 BST 3
*-------*
T ---> | 33 |
*-------*
| |
+------------------+ +------------------+
| |
*-------* *-------*
| 15 | | 44 |
*-------* *-------*
| | | |
+--------+ +--------+ +--------+ +--------+
| | | |
*-------* *-------* *-------* *-------*
| 10 | | 22 | | 36 | | 80 |
*-------* *-------* *-------* *-------*
| | | | | | | |
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| | | | | | | |
*-------* *-------* *-------* *-------* *-------* *-------* *-------* *-------*
| 7 | | 13 | | 19 | | 29 | | 35 | | 37 | | 67 | | 103 |
*-------* *-------* *-------* *-------* *-------* *-------* *-------* *-------*
BST 4
Observar que para un determinado conjunto de identificadores existen varios
BST posibles, como lo muestran los BST 1 y BST 2.
Los BST 1, BST 2 y BST 3 se basan en el órden alfabético y el BST 4 sigue
el órden numérico.
Construido un árbol binario de búsqueda según la definición dada, el
algoritmo más importante es el que determina si un determinado
identificador está o nó en el árbol. En caso afirmativo el algoritmo
retorna el nodo donde está alojado el identificador que se busca. En caso
negativo devuelve un cero.
El procedimiento que sigue buscará en el árbol binario de búsqueda T
por el identificador X, y retorna i = 0 si X no está en el árbol de
búsqueda T, y si X está en el árbol de búsqueda T retorna el nodo
donde el identificador existe.
Observar que T y X son argumentos de entrada
mientras que i es un argumento de salida.
El procedimiento que sigue insertará el identificador X en el árbol binario
de búsqueda T.
Si X existe en T, no se modifica el árbol de
búsqueda T y en j se retorna el nodo donde existe X.
Si X no existe en T, se crea un nodo, se le almacena el identificador X y
se inserta en el árbol de búsqueda T en el lugar apropiado, retornando
el nodo creado o insertado.
Observar que T y X son argumentos de entrada
mientras que j es un argumento de salida.
Veamos ahora como este algoritmo crea BSTs distintos, según el órden
de inserción en el BST de los identificadores.
Tomemos, por ejemplo, los meses del año e insertémoslos según los siguientes
órdenes :
T <---- j
*---* *---* *---*
T ---> |Jan| T ---> |Jul| T ---> |Apr|
*---* *---* *---*
| | | | |
+----------+ +----------+ +----------+ +----------+ +--+
| | | | |
*---* *---* *---* *---* *---*
|Feb| |Mar| |Feb| |May| |Aug|
*---* *---* *---* *---* *---*
| | | | | | | |
+----+ +----+ +----+ +----+ +----+ +----+ +----+ +--+
| | | | | | | |
*---* *---* *---* *---* *---* *---* *---* *---*
|Apr| |Jun| |May| |Aug| |Jan| |Mar| |Oct| |Dec|
*---* *---* *---* *---* *---* *---* *---* *---*
| | | | | | | | .
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ .
| | | | | | | | .
*---* *---* *---* *---* *---* *---* *---* *---* .
|Aug| |Jul| |Sep| |Apr| |Dec| |Jun| |Nov| |Sep| ........
*---* *---* *---* *---* *---* *---* *---* *---* .
| | .
+-+ +-+ .
| | .
*---* *---* *---*
|Dec| |Oct| |Oct|
*---* *---* *---*
| |
+-+ +--+
| |
*---* *---*
|Nov| |Sep|
*---* *---*
BST 5 BST 6 BST 7
Analizaremos el costo de búsqueda de un árbol binario de búsqueda T
como el promedio de buscar todos los identificadores presente en T.
El costo de búsqueda de un identificador en particular está dado por el
número de comparaciones que deben hacerse para hallarlo, y en este caso es igual
al nivel del nodo que contiene el identificador.
Consideremos los ejemplos de los meses del año.
*-----------------------------* *-----------------------------*
| Mes | BST 5 | BST 6 | BST 7 | | Mes | BST 1 | BST 2 | |
*-----------------------------* *-----------------------------*
| Jan | 1 | 3 | 5 | | if | 1 | 1 | |
| Feb | 2 | 2 | 4 | | for | 2 | 2 | |
| Mar | 2 | 3 | 8 | | whi | 2 | 2 | |
| Apr | 3 | 4 | 1 | | rep | 3 | 3 | |
| May | 3 | 2 | 9 | | loo | 4 | 3 | |
| Jun | 3 | 4 | 7 | | | | | |
| Jul | 4 | 1 | 6 | | | | | |
| Aug | 4 | 3 | 2 | | | | | |
| Sep | 4 | 4 | 12 | | | | | |
| Oct | 5 | 3 | 11 | | | | | |
| Nov | 6 | 4 | 10 | | | | | |
| Dec | 5 | 4 | 3 | | | | | |
*-----------------------------* *-----------------------------*
| Tot | 42 | 37 | 78 | | Tot | 12 | 11 | |
*-----------------------------* *-----------------------------*
| Nod | 12 | 12 | 12 | | Nod | 5 | 5 | |
*-----------------------------* *-----------------------------*
| Pro | 3,5 | 3,0 | 6,5 | | Pro | 2,4 | 2,2 | |
*-----------------------------* *-----------------------------*
| Max | 6 | 4 | 12 | | Max | 4 | 3 | |
*-----------------------------* *-----------------------------*
Los árboles binarios de búsqueda completos o llenos son los de menor
costo de búsqueda promedio para n nodos.
Observar que en un árbol binario de búsqueda, si se lo recorre in order, devuelve ordenados, clasificados, a los identificadores insertados. El algoritmo in order, aplicado sobre un árbol binario de búsqueda, se convierte en un algoritmo de clasificación ( sorting algoritmo ).