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.

378 Capítulo 17. Estructuras de datos recursivas<br />

La terminología usada cuando se trabaja con árboles es, cuando m<strong>en</strong>os, curiosa.<br />

En ella se mezclan conceptos botánicos como raíz y hoja y conceptos<br />

g<strong>en</strong>ealógicos tales como hijo, asc<strong>en</strong>di<strong>en</strong>tes, desc<strong>en</strong>di<strong>en</strong>tes, hermanos, padres, etc.<br />

En el árbol de la figura 17.10, el nodo A es la raíz del árbol, mi<strong>en</strong>tras que los<br />

nodos D, E, F y H son las hojas del árbol; por otra parte, los hijos de la raíz son<br />

los nodos B y C, el padre de E es B, . . .<br />

La definición <strong>en</strong> <strong>Pascal</strong> del tipo árbol binario es s<strong>en</strong>cilla: cada nodo del árbol<br />

va a t<strong>en</strong>er dos punteros <strong>en</strong> lugar de uno.<br />

type<br />

tElem = char; {o el tipo que corresponda}<br />

tArbol = ^tNodoArbol;<br />

tNodoArbol = record<br />

hIzdo, hDcho: tArbol;<br />

cont<strong>en</strong>ido: tElem<br />

<strong>en</strong>d; {tNodoArbol}<br />

La creación de un árbol vacío, a estas alturas, no repres<strong>en</strong>ta problema alguno.<br />

Sin embargo no ocurre lo mismo para realizar una consulta, ya que debemos saber<br />

cómo movernos d<strong>en</strong>tro del árbol.<br />

17.4.1 Recorrido de un árbol binario<br />

Definir un algoritmo de recorrido de un árbol binario no es una tarea directa<br />

ya que, al no ser una estructura lineal, exist<strong>en</strong> distintas formas de recorrerlo.<br />

En particular, al llegar a un nodo podemos realizar una de las tres operaciones<br />

sigui<strong>en</strong>tes:<br />

(i) Leer el valor del nodo.<br />

(ii) Seguir por el hijo izquierdo.<br />

(iii) Seguir por el hijo derecho.<br />

El ord<strong>en</strong> <strong>en</strong> el que se efectú<strong>en</strong> las tres operaciones anteriores determinará el ord<strong>en</strong><br />

<strong>en</strong> el que los valores de los nodos del árbol son leídos. Si se postula que siempre se<br />

leerá antes el hijo izquierdo que el derecho, <strong>en</strong>tonces exist<strong>en</strong> tres formas distintas<br />

de recorrer un árbol:<br />

Preord<strong>en</strong>: Primero se lee el valor del nodo y después se recorr<strong>en</strong> los subárboles.<br />

Esta forma de recorrer el árbol también recibe el nombre de recorrido<br />

primero <strong>en</strong> profundidad.<br />

El árbol de la figura 17.10 recorrido <strong>en</strong> preord<strong>en</strong> se leería así: ABDECFGH.

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

Saved successfully!

Ooh no, something went wrong!