estructuras jeráquicas y Árboles binarios de búsqueda

19
Página [115] Página 116 | Topic overview Estructuras Jeráquicas Y Árboles Binarios De Búsqueda Estructuras de datos: Referencia práctica con orientación a objetos Román Martínez and Elda Quiroga. Mexico City: Cengage Learning, 2002. p[115]-136. COPYRIGHT 2002 Cengage Learning Editores, S.A. de C.V. Texto completo: Capítulo 8: Estructuras Jeráquicas Y Árboles Binarios De Búsqueda OBJETIVOS ¿Qué es una estructura jerárquica? Terminología básica en las estructuras jerárquicas o árboles ¿Cómo se relaciona el problema de la búsqueda con los árboles? ¿Qué es un Árbol Binario de Búsqueda (ABB)? Especificación lógica del TDA ABB ¿Cómo se realiza la búsqueda en un ABB? ¿Por qué es eficiente la búsqueda en un ABB? ¿Cómo se realiza la inserción de un elemento en un ABB? ¿Cómo se realiza la eliminación de un elemento en un ABB? ¿Qué ventajas ofrece un ABB sobre el algoritmo de la búsqueda binaria? ¿Qué desventajas tiene un ABB? ¿Qué aplicaciones tiene un ABB? ¿Cómo se puede representar físicamente un ABB? ¿De qué manera se implementan las operaciones y/o aplicaciones sobre árboles binarios? ¿En qué consisten los recorridos en un árbol binario? EJERCICIOS AUTOEVALUACIÓN OBJETIVOS Definir las características de las estructuras de datos jerárquicas. Describir la terminología de las estructuras de datos tipo árbol: nodo raíz nodo hijo nodo padre ancestros descendientes nodo hoja subárbol, altura y niveles. Describir el diseño lógico del TDA árbol binario de búsqueda (ABB), incluyendo las operaciones de búsqueda, inserción y eliminación de un elemento. Implantar el TDA ABB, comprendiendo el movimiento del apuntador en la ruta de búsqueda. Describir la forma en que se realizan los recorridos sobre un árbol binario. Distinguir las ventajas de aplicar la recursividad en la implementación de rutinas relacionadas con árboles binarios. ¿Qué es una estructura jerárquica?

Upload: anonymous-eogaatf

Post on 06-Jul-2016

227 views

Category:

Documents


4 download

DESCRIPTION

Estructuras Jeráquicas Y Árboles Binarios De Búsqueda

TRANSCRIPT

Page 1: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página [115]

Página 116 |

Topic overview

Estructuras Jeráquicas Y Árboles Binarios De Búsqueda

Estructuras de datos: Referencia práctica con orientación a objetos

Román Martínez and Elda Quiroga. Mexico City: Cengage Learning, 2002. p[115]-136. COPYRIGHT 2002 Cengage LearningEditores, S.A. de C.V.

Texto completo:

Capítulo 8: Estructuras Jeráquicas Y Árboles Binarios De Búsqueda

OBJETIVOS ¿Qué es una estructura jerárquica? Terminología básica en las estructuras jerárquicas o árboles ¿Cómo se relacionael problema de la búsqueda con los árboles? ¿Qué es un Árbol Binario de Búsqueda (ABB)? Especificación lógica del TDA

ABB ¿Cómo se realiza la búsqueda en un ABB? ¿Por qué es eficiente la búsqueda en un ABB? ¿Cómo se realiza la inserción de

un elemento en un ABB? ¿Cómo se realiza la eliminación de un elemento en un ABB? ¿Qué ventajas ofrece un ABB sobre elalgoritmo de la búsqueda binaria? ¿Qué desventajas tiene un ABB? ¿Qué aplicaciones tiene un ABB? ¿Cómo se puede

representar físicamente un ABB? ¿De qué manera se implementan las operaciones y/o aplicaciones sobre árboles binarios? ¿En

qué consisten los recorridos en un árbol binario? EJERCICIOS AUTOEVALUACIÓN

OBJETIVOS

Definir las características de las estructuras de datos jerárquicas.Describir la terminología de las estructuras de datos tipo árbol: nodo raíz nodo hijo nodo padre ancestros descendientesnodo hoja subárbol, altura y niveles.

Describir el diseño lógico del TDA árbol binario de búsqueda (ABB), incluyendo las operaciones de búsqueda, inserción yeliminación de un elemento.Implantar el TDA ABB, comprendiendo el movimiento del apuntador en la ruta de búsqueda.

Describir la forma en que se realizan los recorridos sobre un árbol binario.Distinguir las ventajas de aplicar la recursividad en la implementación de rutinas relacionadas con árboles binarios.

¿Qué es una estructura jerárquica?

Page 2: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 117 |

La organización de los datos en una estructura en forma jerárquica o de niveles, es una nueva opción para representar estructurasde datos, comúnmente denominada árboles (figura 8.1). Su característica principal es que mantienen una relación de uno amuchos (1:n) entre sus elementos.

Figura 8.1. Estructura jerárquica o árbol.

Terminología básica en las estructuras jerárquicas o árboles

Nodo raíz: es el primer elemento de un árbol binario; un árbol binario sólo tiene un nodo raíz.Nodo padre: son los nodos que tienen al menos un hijo (derecho y/o izquierdo).Hijo derecho: nodo que se encuentra al lado derecho de otro nodo.Hijo izquierdo: nodo que está al lado izquierdo de otro nodo.Nodo hoja: nodos que no tienen hijos. (Un nodo de un árbol binario puede tener ninguno, uno o dos hijos.)Nodo hermano: nodos que tienen un mismo padre.

Ancestros: nodo padre de un nodo o el padre de algún nodo ancestro. (El nodo raíz es un ancestro de todos los nodos delárbol.)Nodo descendiente: el hijo de un nodo o el hijo de otro descendiente de ese nodo. (Todos los nodos del árbol sondescendientes del nodo raíz.)Subárbol izquierdo: todos los descendientes por la izquierda de un nodo forman un subárbol izquierdo, cuya raíz es elhijo izquierdo de ese nodo.

Subárbol derecho: todos los descendientes por la derecha de un nodo forman un subárbol derecho, cuya raíz es el hijoderecho de ese nodo.Nivel de un nodo: distancia desde la raíz. La raíz está en el nivel cero. Cantidad de nodos por los que se tiene que pasar

para llegar a un nodo. (El número máximo de nodos en el nivel n es 2n.)

Page 3: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 118 |

Figura 8.2. Ejemplo de los elementos de un árbol binario.

¿Cómo se relaciona el problema de la búsqueda con los árboles?

Si se recuerda, en el capítulo anterior se concluyó que la manera más eficiente de realizar una búsqueda en una estructura lineal escon el algoritmo de la búsqueda binaria aplicado en una tabla de memoria estática. Sin embargo, esta estructura presentaba ladesventaja de no ser eficiente para la inserción y eliminación de elementos. Por otro lado, una lista encadenada ordenada tenía unmejor comportamiento en las inserciones y las bajas de elementos, pero no en el algoritmo de la búsqueda binaria. Ante estadisyuntiva, contar con las estructuras jerárquicas (árboles), representa una opción para conjuntar las características positivas deestas estructuras lineales. La propuesta es el TDA Árbol Binario de Búsqueda, que se describe a continuación.

¿Qué es un Árbol Binario de Búsqueda (ABB)?

Un ABB es una estructura de datos que guarda información no repetida para administrar eficientemente la búsqueda de lospropios datos. Pertenece al conjunto de estructuras jerárquicas, restringiendo la relación de uno a dos como máximo ycumpliendo con un ordenamiento de tal forma que, para cada elemento del ABB, los elementos menores estarán a su izquierda ylos mayores a su derecha (figura 8.3).

Page 4: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 119 |

Figura 8.3. Ejemplos de árboles.

Especificación lógica del TDA ABB

ELEMENTOS: los elementos de un ABB se identifican como nodos. Cada uno de ellos contiene un dato (simple oestructurado) único en el árbol.

ESTRUCTURA:un ABB posee una estructura jerárquica (a excepción del árbol vacío). Sólo hay un nodo raíz; los demás formandos subár-boles disjuntos. Cada nodo, excepto el raíz, tiene un único padre y no tiene hijos o tiene uno o doshijos. El hijo izquierdo siempre tendrá un valor menor y es la raíz del subárbol izquierdo y el derecho siempretendrá un valor mayor y es la raíz del subárbol derecho.

OPERACIONES

CREAR

UTILIDAD: crea o inicializa un árbol.

ENTRADAS: el espacio de memoria donde se creará el árbol.

SALIDAS: el árbol inicializado.

PRECONDICIÓN: ninguna

POSTCONDICIÓN:el árbol está inicializado (sin elementos).

BUSCAR

UTILIDAD: busca un elemento dentro del árbol ABB.

ENTRADAS: el árbol ABB donde va a buscar y el elemento (valor) por localizar.

SALIDAS: regresa falso si valor no se encuentra en el árbol o regresa verdadero si encontró valor en el árbol y unapuntador Palmacena la posición dentro del árbol donde está valor.

PRECONDICIÓN: existe el árbol ABB.

POSTCONDICIÓN:ninguna.

INSERTAR

UTILIDAD: inserta un nuevo elemento dentro del árbol ABB.

ENTRADAS: el árbol ABB donde va a insertar el elemento y el elemento nuevo.

SALIDAS: el árbol tiene un nuevo elemento (nuevo) insertado como hoja en la posición que le correspondía, según suvalor.

PRECONDICIÓN: el árbol ABB existe y el elemento nuevo no está en él.

POSTCONDICIÓN:el árbol ABB contiene al elemento nuevo insertado como una hoja.

BORRAR

UTILIDAD: elimina un elemento del árbol.

ENTRADAS: el árbol ABB de donde se va a eliminar el elemento y el elemento (dato) a borrar.

SALIDAS: regresa falso si dato no se encuentra en el árbol; regresa verdadero si encontró dato en el árbol y lo pudo

Page 5: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 120 |

eliminar, en cuyo caso, regresa el árbol modificado.

PRECONDICIÓN: el árbol ABB existe y el elemento dato se encuentra en dicho árbol.

POSTCONDICIÓN:el árbol ABB contiene un elemento menos (dato).

RECORRER

UTILIDAD: despliega los elementos almacenados en el árbol.

ENTRADAS: el árbol ABB a desplegar y el orden en que se desplegarán los elementos.

SALIDAS: cada nodo en el árbol se procesa exactamente una vez. El orden en que se procesan los nodos dependedel valor de orden. Si orden es:

PREORDEN: Cada nodo se procesa antes que cualquiera de los nodos existentes en sus subárboles.

INORDEN: cada nodo se procesa exactamente después de procesar todos los nodos de su subárbol izquierdo, peroantes de procesar los de su subárbol derecho.

POSTORDEN: Cada nodo es procesado después de que se procesaron los nodos existentes en ambos subárboles.

PRECONDICIÓN: existe el árbol ABB.

POSTCONDICIÓN:ninguna.

Page 6: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 121 |

¿Cómo se realiza la búsqueda en un ABB?

La idea básica del algorimo de búsqueda consiste en comparar la información del nodo con la del valor buscado; si no soniguales, el apuntador de búsqueda se mueve a la izquierda o a la derecha del valor buscado, según sea menor o mayor,

comenzando por la raíz y hasta que se encuentre o no el valor.

El algoritmo se puede describir con los siguientes pasos:

1. Coloque un apuntador auxiliar en la raíz del árbol.

2. Mientras no se haya encontrado el valor que se busca y el apuntador auxiliar no esté vacío (fuera del árbol):

Verifique si la información del nodo señalado por el apuntador au-xilar es mayor, menor o igual al nodo buscado.

- Si es mayor, mueva el apuntador auxiliar al nodo hijo derecho; si es menor, mueva el apuntador auxiliar al nodo hijo izquierdo.Si son iguales, ha encontrado el nodo y el apuntador auxiliar lo señala (figura 8.4.).

Figura 8.4. Movimiento de apuntadores para buscar el elemento 13.

¿Por qué es eficiente la búsqueda en un ABB?

Page 7: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 122 |

El ABB es una consecuencia directa del algoritmo de búsqueda binaria sobre una estructura lineal y, por lo tanto, tiene todos sus

beneficios.Si un ABB tiene distribuidos sus elementos en forma balanceada, seobtendrá el mayor beneficio, pues se harían lasmismas comparaciones que en una búsqueda binaria sobre un arreglo. El peor caso de una búsqueda en un ABB está

determinado por la altura del árbol y, por lo tanto, entre menor altura tenga el ABB, es decir, entre más balanceado esté, se

obtendrán mejores resultados.

¿Cómo se realiza la inserción de un elemento en un ABB?

Todo nuevo nodo se insertará como nodo hoja en el ABB, en el lugar que le corresponda según el proceso de búsqueda (figura

8.5).

Figura 8.5. Inserción de un elemento en un ABB.

El ejemplo anterior ilustra la manera en que se insertaría el elemento 15 en un ABB; es decir, el algoritmo busca al nodo cantidatoa padre del nuevo valor y realiza la inserción correspondiente mediante los siguientes pasos:

1. Se crea un nuevo nodo por medio de un apuntador auxiliar 1. Se llena con la información que se va a insertar en el árbol yse colocan sus apuntadores como nodo hoja.

2. Se coloca un apuntador auxiliar 2 en la raíz del árbol y un apuntador auxiliar 3 en vacío. El apuntador auxiliar 3 siempreseñalará al nodo padre del nodo al que señala el apuntador auxiliar 2.

3. Mientras el apuntador auxiliar 2 no sea vacío (fuera del árbol) se realiza lo siguiente:Se coloca el apuntador auxiliar 3 en el nodo que marca el apuntador auxiliar 2.

Mueva el apuntador auxiliar 2 al nodo hijo izquierdo si la información que se va a insertar es menor a la informacióndel nodo que señala el apuntador auxiliar 2; en caso contrario, debe moverse a la derecha (pues la información por

insertar es mayor).Al salir del ciclo el apuntador auxiliar 2 señalará vacío, pero el apuntador auxiliar 3 estará en el nodo que será el

padre del nuevo.

4. Verifique si el apuntador auxiliar 3 es vacío, en cuyo caso, el nuevo nodo será el primero en el árbol y el apuntador raíztendrá que señalarlo.

Si el apuntador auxiliar 3 no es vacío, entonces estará señalando al padre del nuevo nodo. Se debe verificar si la información del

nuevo nodo es menor a la del marcado por el apuntador auxiliar 3, en cuyo caso deberá encadenarse el nuevo nodo como un hijoizquierdo del señalado por el apuntador auxiliar 3. Si la información no es menor, entonces será mayor y tendrá que encadenarse

como hijo derecho.

¿Cómo se realiza la eliminación de un elemento en un ABB?

Page 8: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 123 |

La acción de borrar un nodo puede enfrentarse con alguno de los siguientes casos:

1. El nodo que se va a borrar es una hoja. Puesto que no tiene hijos, su nodo padre apuntará ahora a vacío (figura 8.6).

2. El nodo por borrar tiene sólo un hijo. En este caso, el padre del que se va a borrar puede apuntar directamente al nodohijo del que se eliminará (figura 8.7.)

Figura 8.6. Eliminación de un nodo hoja: se elimina el 8.

Figura 8.7. Eliminación de un nodo con un hijo: se elimina el 21.

3. El nodo por borrar tiene dos hijos. Puesto que el padre del que se va a eliminar no puede heredar dos apuntadores, se

busca un valor sustituto del valor por borrar y el nodo no se borra físicamente. Se puede escoger como sustituto al

predecesor del que se eliminará (el valor mayor de todos los valores menores; o bien, de los nodos del subárbol izquierdoel de más a la derecha), y se elimina físicamente el nodo donde se encuentre (figura 8.8). Se puede asegurar que la baja

física del nodo sustituto cae en alguno de los dos primeros casos. De igual manera, se puede considerar al sucesor comovalor sustituto.

Page 9: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 124 |

Página 125 |

Figura B.B. Eliminación de un nodo con dos hijos: se elimina el 12.

El algoritmo de esta operación está compuesto de dos partes. La primera se encarga de localizar el nodo por borrar y la segundaborra el nodo encontrado.

Primera parte (localizar el nodo por borrar)

1. Se coloca un apuntador auxiliar 1 en la raíz del árbol y un apuntador auxiliar 2 en vacío. El apuntador auxiliar 2 siempreseñalará al nodo padre del que señala el apuntador auxiliar 1.

2. Mientras no se haya encontrado el nodo por borrar:

Se verifica si la información del nodo señalado por el apuntador auxiliar 1 es la que se desea borrar, en caso de que no sea:a) se coloca el apuntador auxiliar 2 en el nodo que señala el apuntador auxiliar 1 y b) se mueve el apuntador auxiliar I al

nodo hijo izquierdo si la información que se va a borrar es menor a la información del nodo que señala el apuntador auxiliar

1; en caso contrario, debe moverse a la derecha.

Al salir del ciclo, el apuntador auxiliar 1 estará señalando al nodo por borrar y el apuntador auxiliar 2 al nodo padre.

Segunda parte (eliminar el nodo correspondiente)

1. Se coloca un apuntador temporal en el nodo que debe borrar.

2. Se verifica si el nodo por borrar es hoja o tiene sólo un hijo, en cuyo caso se desencadenará del árbol para darlo de baja.Nodo hoja: Si el nodo apuntado por el auxiliar 1 no tiene hijo izquierdo ni derecho, debe modificarse el apuntador que lo

conecta con su padre (a través del auxiliar 2) de tal forma que apunte hacia vacío. Nodo con un hijo derecho: si el nodoapuntado por el auxiliar 1 no

tiene hijo izquierdo, pero sí derecho, se modifica el apuntador que lo conecta con su padre (a través del auxiliar 2) de tal

forma que señale al hijo derecho.Nodo con un hijo izquierdo: si el nodo apuntado por el auxiliar 1 no tiene hijo derecho, pero sí hijo izquierdo, debe

modificarse el apuntador que lo conecta con su padre (a través del auxiliar 2) de tal forma que señale al nodo hijoizquierdo.

Nodo con dos hijos: si el nodo tiene dos hijos se procederá a localizar su sustituto buscando a su predecesor de lasiguiente forma:

Se coloca el apuntador temporal en el hijo izquierdo del nodo señalado por el apuntador auxiliar 1.

Se mueve el apuntador temporal hacia la derecha lo más posible, es decir, justo en el nodo antes de que elmovimiento a la derecha lo saque del árbol. El nodo al que se llegue será el nodo sustituto y se puede asegurar que

es nodo hoja o que tiene sólo un hijo izquierdo.

Page 10: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 126 |

Se copia la información del nodo sustituto en el marcado por el apuntador auxiliar 1.

Se desencadena el nodo señalado por el apuntador temporal de la misma forma en que se hace para un nodo hoja o

uno con hijo izquierdo. En este caso, para el movimiento de apuntadores, se tendrá que evaluar si el nodo marcadopor el apuntador temporal es la raíz del subárbol izquierdo del nodo señalado por el apuntador auxiliar 1 o es de un

nivel inferior.3. 3. Se libera el nodo señalado por el apuntador temporal.

¿Qué ventajas ofrece un ABB sobre el algoritmo de la búsqueda binaria?

Aunque la eficiencia de una búsqueda en un ABB es igual a la del algoritmo de la búsqueda binaria en una estructura lineal, elABB ofrece adicionalmente la ventaja de su representación por medio de ligas.

La mejor representación para un ABB será utilizando memoria dinámica obteniendo así sus beneficios, pues el algoritmo debúsqueda binaria pierde su eficiencia si se trata de aplicar en una lista encadenada ordenada.

¿Qué desventajas tiene un ABB?

La principal desventaja de un ABB es la forma en que se realizan las inserciones y eliminaciones de elementos. El orden de

inserción y eliminación determina la forma en que se balancea el árbol y, por lo tanto, repercute en las búsquedas posteriores. En

el peor de los casos, un ABB puede degenerar en una lista sobre la que se aplicará una búsqueda secuencia!. Se puede hacer laprueba insertando en el árbol vacío una secuencia ordenada de datos y comprobando que el árbol que se forma es uno en que

sólo se encadenan los nodos por medio de un sólo apuntador y se degenera en una lista. Obviamente, en este caso el algoritmode búsqueda en el ABB se comportará como una búsqueda secuencial. La forma de atacar este problema se analizará en

capítulos posteriores al conocer otras estructuras.

¿Qué aplicaciones tiene un ABB?

Un ABB será útil en cualquier aplicación en la que se requiera administrar un grupo ordenado de datos en memoria principal con

el objetivo básico de buscar de manera eficiente cualquier dato. Se recomienda que la aplicación tenga al grupo de datos bien

definido desde un principio y que no requiera de muchas altas y bajas para mantener el árbol lo más balanceado posible.

¿Cómo se puede representar físicamente un ABB?

La forma de representar un ABB está obligada a utilizar ligas, ya sea en memoria dinámica (preferentemente) o estática.

La base de esta representación estará en un nodo que contenga la información y los apuntadores a los subárboles izquierdo y

derecho. El ABB estará controlado mediante un apuntador principal al nodo raíz del árbol (figura 8.9).

Page 11: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 127 |

Figura 8.9. Representación de un ABB en memoria, con nodos que contienenapuntadores a sus hijos izquierdos y derechos. El

control del árbol está en el apuntador principal raíz.

Declaración de tipos para un ABB en lenguaje C:

typedef struct nodo

{tipoinfo info; struct nodo *izq, *der; } tiponodo;

typedef tiponodo *tipoarboI;

Declaración de tipos para un ABB en lenguaje C++:

class NodoArbol

{public:

tipoinfo info;

NodoÁrbol *izq, *der;

NodoArbolO {izq=der=NULL;}

NodoArbol(tipoinfo dato)

{info=dato; izq=der=NULL;}

};

class ABB

{prívate:

NodoArbol *raiz;

public:

ABB() {raiz=NULL;}

~ABB() //se requiere un destructor

Page 12: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 128 |

//otros metodos…

};

¿De qué manera se implementan las operaciones y/o aplicaciones sobreárboles binarios?

La implementación de las operaciones sobre árboles binarios requiere observar previamente qué tipo de solución conviene.Cuando lo que se quiere programar requiere visitar sólo un camino lineal dentro del árbol, una solución iterativa que manejeapuntadores será suficiente; pero cuando se deba implementar una operación en la que se necesite visitar todos los nodos del

árbol, será conveniente hacer uso de la re-cursividad como estrategia de solución. La recursividad, en este caso, se presta comoestrategia, pues los árboles binarios son una estructura que se puede definir recursivamente, hablando de los subárboles izquierdoy derecho.

Algoritmo iterativo de la búsqueda

NodoABB *p=raiz;

while (p!=NULL)

{ if(p->info == valor)

return(p);

else

p=(p->info > valor? p->izq: p->der):

}

return(NULL);

Algoritmo iterativo de la inserción

NodoABB *NuevoNodo = new Nodo Arbol (valor);

NodoABB *actml = raíz, *anterior = NULL;

while (actual !=NULL)

{anterior=actual;

actual=(actual->info>valor? actual->izq: actual->der); }

if(anterior==NULL)

raiz=NuevoNodo;

else

if(anterior->info > valor)

anterior->izq=NuevoNodo;

Page 13: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 129 |

else

anterior->der=NuevoNodo;

Rutina recursiva para desplegar la información de un árbol binario

void despliega ( NodoABB* raíz)

¿En qué consisten los recorridos en un árbol binario?

La acción de recorrer una estructura de datos es muy importante, pues permite hacer algo en todos los elementos de la estructura

(por ejemplo, desplegarlos en pantalla). Esto es relativamente simple en una estructura lineal, pues sólo se recorre desde elprincipio hasta el final. Pero ahora, en una estructura jerárquica como los árboles binarios, hay diferentes formas de realizar estosrecorridos.

Los algoritmos de los recorridos de un árbol binario se pueden plantear recursivamente de la siguiente forma (se entiende que

“visitar” esla acción por aplicar al nodo durante el recorrido). Asimismo, se observa que un recorrido se aplica sobre cualquierárbol binario, sin importar si es o no de búsqueda (figura 8.10).

Preorden: ú til para reconstruir un ABB

1. Visite el nodo raíz del árbol.2. Recorra en preorden el subárbol izquierdo del nodo raíz.

3. Recorra en preorden el subárbol derecho del nodo raíz.

Inorden: ú til para desplegar en orden la información de un ABB

1. Recorra en inorden el subárbol izquierdo del nodo raíz.2. Visite el nodo raíz del árbol.3. Recorra en inorden el subárbol derecho del nodo raíz.

Postorden: ú til para implementar el destructor de un árbol binario (eliminación de todos los nodos)

1. Recorra en postorden el subárbol izquierdo del nodo raíz.

Page 14: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 130 |

2. Recorra en postorden el subárbol derecho del nodo raíz.3. Visite el nodo raíz del árbol.

Además de estos recorridos tradicionales, se tienen los recorridos conversos, en los que el orden de recorrido se invierte aderecha-izquierda, en vez de izquierda-derecha.

Finalmente, existe un recorrido llamado nivel por nivel, en el que los nodos del árbol se visitan por niveles a partir del 0, y de

izquierda a derecha. Este algoritmo puede plantearse iterativamente, utilizando una fila de la siguiente manera:

1. Inserte el apuntador al nodo raíz a una fila.2. Mientras la fila no se vacíe:

Saque el apuntador de la fila y procese el nodo señalado.Inserte en la fila los apuntadores de los hijos del nodo procesado (si éstos existen).

Ejemplo

Figura 8.10.

EJERCICIOS

1. Dado el siguiente árbol binario de búsqueda codificado (cada símbolo de un nodo corresponde a un valor numérico),responda cada uno de los siguientes incisos:

Figura 8.10.

¿Qué símbolo representa el valor numérico más grande en el árbol?

Page 15: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 132 |

Página 131 |

¿Qué símbolo representa el valor numérico más pequeño en el árbol?

¿Qué símbolo representa el valor medio en el árbol?¿Cuáles son los ancestros del nodo que contiene el símbolo “?“?¿Cuántas comparaciones se requerirán para encontrar el símbolo & en el árbol?¿Cuántos nodos como máximo podrían existir en el árbol si su altura fuera igual a 4?

¿Cuál es el símbolo cuyo valor numérico asociado es inmediatamente mayor al valor numérico del símbolo = ?Si el símbolo % representa la suma de los valores asociados a los símbolos $ y /, muestre con un dibujo cómoquedaría el árbol al insertar el símbolo %.

2. A

continuación se muestra una serie de casos que deberán resolverse implementando una función libre en C++, y trabajandoiterativamente (no recursivamente) en el nivel físico del árbol binario de búsqueda. Considere, para todos los casos, que elmódulo recibirá el árbol a través de un apuntador a su nodo raíz.

Realice un módulo que sirva para encontrar el número de nivel en que se encuentra un dato en el ABB.Realice un módulo que, dado un elemento del árbol, obtenga el elemento que es su abuelo.Realice un módulo que, dado un elemento del árbol, despliegue los elementos que son sus ancestros.Realice un módulo que, dados los valores de dos elementos de un ABB, encuentre cuáles son los nodos ancestros

comunes a ambos. Los ancestros se deberán desplegar del más antiguo al más joven.Realice un módulo que sirva para desplegar los valores de los no-dos primos del nodo, cuyo valor se especificarácomo entrada al módulo.

3. Se tiene el siguiente ABB almacenado en un arreglo de memoria estática. Los nodos disponibles se manejan como una pila

en una lista doblemente encadenada a través de los campos izq y der. Tome en cuenta que 0 = NULL y que el apuntadordisponible señala el tope de la pila.

Muestre a través de un esquema el árbol que está representado en este arreglo.

Para cada uno de los siguientes puntos, muestre el estado del arreglo y de los apuntadores, después de ejecutar lasoperaciones que se indican. Además, muestre el esquema del árbol correspondiente. Para todos los puntos tomesiempre las condiciones iniciales (originales) del árbol. Si es necesario, emplee la estrategia del “menor de los

mayores” al dar de baja un nodo.i) Inserte en el árbol el elemento Sonora.ii) Elimine del árbol original el elemento Zacatecas.iii) Elimine del árbol original el elemento que se encuentra en la raíz.

Nota: los siguientes problemas se pueden aplicar en cualquier árbol binario, sin importar si es de búsqueda o no.4. Escriba una función recursiva que sirva para obtener la altura de un árbol binario. La altura de un árbol binario se define

como la distancia entre el nodo raíz y el nodo hoja más alejado de la raíz, o bien, la cantidad de niveles que tiene el árbol.

Page 16: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 133 |

La función recibirá como entrada el apuntador al nodo raíz del árbol.5. Escriba una función que sirva para obtener la anchura de un árbol binario, que se define como la cantidad máxima de

nodos que se encuentran en algún nivel del árbol. La función recibirá como entrada el apuntador al nodo raíz del árbol.Para este caso, se recomienda apoyarse en la práctica del recorrido nivel por nivel.

6. Modifique la implementación del recorrido nivel por nivel, para desplegar los elementos de un árbol binario, de tal forma

que para cada nivel del árbol se muestren los elementos que hay en el nivel, de izquierda a derecha. La función recibirácomo entrada el apuntador al nodo raíz del árbol.

7. Realice la implementación de una función que sirva para desplegar en pantalla la información que guardan las hojas de unárbol, de izquierda a derecha. Describa también la rutina equivalente que lo haga de derecha a izquierda.

8. Para cada uno de los siguientes incisos, dados los recorridos, construya el árbol binario correspondiente:a) Inorden: ? / − X + % * # $ & 3 ∑ ¿ @Postorden: ? − / + X % * & ∑ 3 ¿ $ @ #b) Preorden:3 1 94 7

Postorden:7 4 9 1 39. ¿Qué tipo de recorrido sobre un árbol binario realiza la siguiente función?

Nota: suponga que la clase pila está parametrizada y que se imple-menta según las necesidades de esta aplicación.

vote recorrido (NodoArbol *Raiz)

{ P¡la<NodoÁrbol*>P

Nodo Arbol* aux m Raíz;

do

{ while (aux != NUIL)

{cout << aux -> info; }

Pila.Meten(aux);

aux = aux >izq; }

if(Piia.Sacar(aux))

aux = aux->der;

} while (aux != NULL) // ( / Pila.Vacia());

}

AUTOEVALUACIÓN

Para las preguntas 1, 2 y 3 utilice el árbol binario de búsqueda codificado que se muestra en la siguiente figura:

Page 17: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 134 |

1. Si los símbolos representan la codificación de los valores del 1 al 20,¿cuál es el valor asociado al símbolo +?a) 5 b) 8 c) 9 d) 13 e) 15

2. Si se quisiera dar de baja la raíz del árbol, ¿cuál de los siguientes símbolos es candidato para sustituirlo?

a) R b)- c) 0 d) T e) Z

3. Si el símbolo ∑ representa un valor menor que todos los valores del árbol, ¿en qué posición se insertaría?A la izquierda del nodo que contiene el símbolo L.

A la derecha del nodo que contiene al símbolo O.A la izquierda del nodo que contiene al símbolo Z.A la izquierda del nodo que contiene al símbolo -.A la derecha del nodo que contiene al símbolo L.

4. La siguiente figura muestra la representación de un árbol binario de búsqueda en memoria estática. ¿Cuál es el valor delapuntador RAÍZ después de eliminar el valor TIGRES del árbol?Suponga que 0 = NULL y que la lista de disponibles se maneja como pila a través del campo izq.

a) 5 b) 6 c) l d) 0 e) 25. Los recorridos conversos son una vanante de los recorridos tradicionales sobre un árbol binario. Se basan en la misma idea

de losrecorridos tradicionales, sólo que en vez de visitar primero el subár-bol izquierdo y luego el derecho, se visitaprimero el subárbol derecho y después el izquierdo.

Page 18: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 135 |

Para el siguiente árbol binario, indique cuál de los siguientes recorridos es correcto:

Preorden converso: A $ # + ° * R 3 @ X 9

Postorden:° + # $ R X 9 @ 3 * AInorden converso: $ + ° # A R * X @ 9 3Todos los anterioresNinguno de los anteriores

6. ¿Qué desplegará en pantalla la ejecución del módulo misterio, si sele envía como entrada el árbol que se muestra?7.

Figura 8.10.

U * Z M 8 P R E + C 55 C + E R P 8 M Z * UC 5 + R E M 8 P * Z U

U Z * P 8 M E R + 5 CU * M R + C 5 Z 8 P E

8. ¿Cuál es el módulo recursivo para contar la cantidad de valoresnegativos que hay en un árbol binario?int Cuenta (NodoÁrbol *Raiz);

{ if(Raiz==NULL)return 0;else

Page 19: Estructuras Jeráquicas Y Árboles Binarios de Búsqueda

Página 136 |

if(Raiz->info <0)return I;else

return Cuenta(Raiz->izq)+Cuenta(Raiz->der);}

int Cuenta (NodoÁrbol *Raiz);

{ if(Raiz==NULL)return 0;elseif(Raiz->info>0)

return 1;elsereturn Cuenta(Raiz->izq)+Cuenta(Raiz_der);}

int Cuenta (NodoÁrbol *Rak);{ if(Raiz==NULL)return 0;

elseif (Raiz->info > 0)return(J+Cuenta(Raiz->izq)+Cuenta(Raiz->der)};else

return 0;}int Cuenta (NodoArbol *Rak);{ if(Raiz==NULL)

return 0;elseif (Raiz->info > 0)

return(Cuenta(Raiz->izq)+Cuenta(Raiz->der)};elsereturn(1 + Cuenta(Raiz->izq)+Cuenta(Raiz->der));}

Ninguno de los anteriores.

Cita de fuente (MLA 7.a edición) "Estructuras Jeráquicas Y Árboles Binarios De Búsqueda." Estructuras de datos: Referencia práctica con orientación a

objetos. Román Martínez and Elda Quiroga. Mexico City: Cengage Learning, 2002. [115]-136. Gale Virtual ReferenceLibrary. Web. 5 Sept. 2014.

Document URLhttp://go.galegroup.com/ps/i.do?id=GALE%7CCX3003600014&v=2.1&u=unad&it=r&p=GVRL&sw=w&asid=a29a6b0c9d7fe84660bf21581cd87b8e

Número de documento de Gale: GALE|CX3003600014