09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

17.4.<br />

Árboles binarios 383<br />

conectar y no obt<strong>en</strong>dríamos un árbol binario. La tarea consiste <strong>en</strong> eliminar<br />

el nodo deseado y recomponer las conexiones de modo que se siga t<strong>en</strong>i<strong>en</strong>do<br />

un árbol de búsqueda.<br />

En primer lugar, hay que considerar que el nodo que se coloque <strong>en</strong> el lugar<br />

del nodo eliminado ti<strong>en</strong>e que ser mayor que todos los elem<strong>en</strong>tos de su<br />

subárbol izquierdo, luego la primera tarea consistirá <strong>en</strong> buscar tal nodo;<br />

de éste se dice que es el predecesor del nodo por eliminar (¿<strong>en</strong> qué posición<br />

se <strong>en</strong>cu<strong>en</strong>tra el nodo predecesor?).<br />

Una vez hallado el predecesor el resto es bi<strong>en</strong> fácil, sólo hay que copiar su<br />

valor <strong>en</strong> el nodo por eliminar y desechar el nodo predecesor.<br />

A continuación se pres<strong>en</strong>ta un esbozo <strong>en</strong> seudocódigo del algoritmo <strong>en</strong> cuestión;<br />

la implem<strong>en</strong>tación <strong>en</strong> <strong>Pascal</strong> del procedimi<strong>en</strong>to se deja como ejercicio indicado.<br />

Determinar el número de hijos del nodo N a eliminar<br />

si N no ti<strong>en</strong>e hijos <strong>en</strong>tonces<br />

eliminarlo<br />

<strong>en</strong> otro caso si N sólo ti<strong>en</strong>e un hijo H <strong>en</strong>tonces<br />

Conectar H con el padre de N<br />

<strong>en</strong> otro caso si N ti<strong>en</strong>e dos hijos <strong>en</strong>tonces<br />

Buscar el predecesor de N<br />

Copiar su valor <strong>en</strong> el nodo a eliminar<br />

Desechar el nodo predecesor<br />

17.4.3 Aplicaciones<br />

Recorrido <strong>en</strong> anchura de un árbol binario<br />

El uso de colas resulta útil para describir el recorrido <strong>en</strong> anchura de un<br />

árbol. Hemos visto tres formas distintas de recorrer un árbol binario: recorrido<br />

<strong>en</strong> preord<strong>en</strong>, <strong>en</strong> inord<strong>en</strong> y <strong>en</strong> postord<strong>en</strong>. El recorrido primero <strong>en</strong> anchura del<br />

árbol de la figura 17.10 nos da la sigui<strong>en</strong>te ord<strong>en</strong>ación de nodos: ABCDEFGH.<br />

La idea consiste <strong>en</strong> leer los nodos nivel a nivel, primero la raíz, luego (de izquierda<br />

a derecha) los nodos de profundidad 1, los de profundidad 2, etc.<br />

Analicemos cómo trabaja el algoritmo que hay que codificar, para ello seguimos<br />

el recorrido <strong>en</strong> anchura sobre el árbol de la figura 17.10:<br />

1. En primer lugar se lee la raíz de árbol: A.<br />

2. Luego hay que leer los hijos de la raíz, B y C.<br />

3. Después, se le<strong>en</strong> D y E (hijos de B) y F y G (hijos de C).<br />

4. Finalm<strong>en</strong>te se lee G, el único nodo de profundidad 3.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!