Está en la página 1de 4

Resumen: En este artculo el autor describe como se implementan los rboles en el lenguaje de programacin Object Pascal.

Introduccin: Una de las caractersticas ms importantes de Object Pascal es su capacidad para admitir diferentes tipos de datos. Entre ellos estn los datos de tipo simple, los de tipo estructurado y los de tipo puntero. Los datos de tipo simple son elementos individuales (nmeros, caracteres, etc) que se asocian a identificadores nicos. Existen varios tipos de datos simples que abarcan los cuatro tipos estndar (entero, real, de caracteres, bolanos) y a los tipos simples definidos por el programador (enumerados y subrango). Los datos de tipo estructurado se componen de mltiples elementos relacionados entre s que se asocian a un nico identificador. Los elementos individuales, dentro del grupo, pueden asociarse tambin a identificadores independientes. Hay cuatro tipos de datos estructurados: arrays, registros, ficheros y conjuntos. Los datos de tipo puntero se emplean para construir tipos dinmicos de datos estructurados tales como las listas enlazadas y los rboles. Este trabajo tiene como propsito describir la implementacin de estos ltimos en Object Pascal. Desarrollo: Los datos presentan frecuentemente una relacin jerrquica entre sus elementos; tal es el caso, por ejemplo, de rboles genealgicos, tablas de contenidos, etc. La estructura de datos que se emplea para reflejar esta relacin recibe el nombre de grafo en rbol o simplemente rbol. Un rbol se representa generalmente en forma de diagrama:

En este caso se dice que el rbol tiene nueve nodos, representados por las letras de la A a la I, la raz del rbol es el nodo A que es el que est en la parte superior del diagrama; una lnea hacia abajo y a la izquierda de un nodo seala un sucesor izquierdo del mismo, y una lnea hacia abajo y a la derecha seala un sucesor derecho (B es un sucesor izquierdo de A y C un sucesor derecho), el subrbol izquierdo de la raz A consiste en los nodos B, D y E, y el subrbol derecho en los nodos C, F, G, H, I. Los nodos sin sucesor se llaman nodos terminales. Cada nodo del rbol contiene un subrbol izquierdo y uno derecho. Si el nodo es terminal, ambos subrboles estn vacos. La forma ms usual de representar un rbol en la memoria de la computadora es la llamada representacin enlazada:

En esta representacin, cada nodo consta de tres campos: uno para almacenar la informacin que contiene el nodo y los otros dos para apuntar a los subrboles izquierdo y derecho del mismo, respectivamente. Para ilustrar cmo se implementan los rboles en Object Pascal, se analiza a continuacin como se podra crear un programa que "aprenda" sobre personajes histricos en la medida en que se trabaje con l. El programa constar con una base de "conocimientos", que le permitir a partir de ciertos datos "adivinar" un personaje histrico, en el caso de que el personaje no est registrado en su base de conocimientos, el programa lo incorporar a esta junto con una informacin sobre el mismo que lo distinga de los dems. Supongamos que la base inicial de conocimientos est limitada a una pregunta con dos posibles respuestas, una afirmativa y otra negativa. La pregunta pudiera ser: Fue asaltante del Moncada? Si la respuesta es afirmativa, se podra pensar en Fidel, mientras que si es negativa, se podra pensar en Mart.

Para implementar el rbol, se utilizan variables de tipo puntero y variables referenciadas. La variable de tipo puntero se llamar Puntero y apuntar a la variable referenciada Arbol que ser un registro que estar formado por tres campos: Nodo para almacenar la informacin sobre el hecho histrico, Ramazquierda que apuntar al personaje histrico que cumple con las exigencias de la informacin y RamaDerecha que utilizaremos para apuntar al personaje que no cumple los requisitos de la informacin. Type Puntero = Arbol; Arbol = Record Nodo : String; RamaIzquierda : Puntero; RamaDerecha : Puntero; End; La variable referenciada se crea dinmicamente utilizando el procedimiento estndar New.

El rbol se construir creando cada nodo y enlazndolo, despus que se creen los subrboles, a su sucesor izquierdo y derecho respectivamente. Para ello se declaran las variables de tipo Puntero: Var Elemento, Predecesor : Puntero; Elemento para el nodo que se crea y Predecesor para poder actualizar los punteros, de ese elemento que se cre, despus que se creen los subrboles ya que dichos punteros, inicialmente, apuntarn a Nil para indicar que estn vaco. New (Elemento); Elemento.Nodo := Fue asaltante del Moncada?; Elemento.RamaIzquierda := Nil; ElementoRamaDerecha := Nil; Predecesor := Elemento; New (Elemento); Elemento.Nodo := Fidel; Elemento.RamaIzquierda := Nil; ElementoRamaDerecha := Nil; Predecesor.RamaIzquierda := Elemento; New (Elemento); Elemento.Nodo := Mart; Elemento.RamaIzquierda := Nil; ElementoRamaDerecha := Nil; Predecesor.RamaDerecha := Elemento; Si al correr el programa el usuario pens por ejemplo en Maceo, se recorrer el subrbol derecho al responderse que no fue asaltante al Moncada y se preguntar entonces si es Mart, como la respuesta es de nuevo negativa, le pedir al usuario que introduzca el nombre del personaje y una informacin que lo distinga de Mart. Suponga que la informacin es: Particip en la Protesta de Baragua? Con esta informacin se debe modificar la informacin de la rama derecha del rbol.

En este caso se crear primero el personaje y despus el nodo que contendr la informacin relacionada con el mismo por lo que se utilizar otra variable de tipo Puntero que se llamar Sucesor y que se emplear para enlazar el nuevo nodo con este personaje. New (Elemento); Elemento.Nodo := Maceo; Elemento.RamaIzquierda := Nil;

ElementoRamaDerecha := Nil; Sucesor := Elemento; New (Elemento); Elemento.Nodo := Particip en la Protesta de Baragua?; Elemento.RamaIzquierda := Sucesor; Elemento.RamaDerecha := Predecesor.RamaDerecha; Predecesor.RamaDerecha := Elemento; Note como con las instrucciones Elemento.RamaIzquierda := Sucesor; y Elemento.RamaDerecha := Predecesor.RamaDerecha; se enlaza el nuevo nodo con los personajes Maceo y Mart, respectivamente. Con la instruccin Predecesor.RamaDerecha := Elemento; se actualiza la rama derecha del nodo que antecede al que se est insertando. Si el usuario pens por ejemplo en Abel y la pregunta es: Es mrtir de la Revolucin?, el rbol sera entonces:

Por lo que se deber modificar la informacin de la rama izquierda. New (Elemento); Elemento.Nodo := Abel; Elemento.RamaIzquierda := Nil; ElementoRamaDerecha := Nil; Sucesor := Elemento; New (Elemento); Elemento.Nodo := Es mrtir de la Revolucin?; Elemento.RamaIzquierda := Sucesor; Elemento.RamaDerecha := Predecesor.RamaIzquierda Predecesor.RamaIzquierda := Elemento; En la medida en que se corra el programa el rbol crecer por las diferentes ramas en funcin de la informacin entrada por el usuario, se enriquecer la base de conocimientos y el programa habr "aprendido". Conclusiones: El conocimiento de la implementacin de los rboles en Object Pascal, permite la representacin de estructuras de datos en la memoria de la computadora cuando la relacin entre los elementos que componen dicha estructura es una relacin jerrquica.

También podría gustarte