Está en la página 1de 28

rbol (informtica) De Wikipedia, la enciclopedia libre (Redirigido desde rbol (estructura de datos)) Saltar a navegacin, bsqueda Para otros

usos de este trmino, vase rbol (desambiguacin). En ciencias de la informtica, un rbol es una estructura de datos ampliamente usada que imita la forma de un rbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el rbol y puede tener cero o ms nodos hijos conectados a l. Se dice que un nodo a es padre de un nodo b si existe un enlace desde a hasta b (en ese caso, tambin decimos que b es hijo de a). Slo puede haber un nico nodo sin padres, que llamaremos raz. Un nodo que no tiene hijos se conoce como hoja. Los dems nodos (tienen padre y uno o varios hijos) se les conoce como rama. Definicin [editar] Formalmente, podemos definir un rbol de la siguiente forma:
y

Caso base: un rbol con slo un nodo (es a la vez raz del rbol y hoja). Un nuevo rbol a partir de un nodo nr y k rboles de races con elementos cada uno, puede construirse estableciendo una relacin padre-hijo entre nr y cada una de las races de los k rboles. El rbol resultante de nodos tiene como raz el nodo nr, los nodos son los hijos de nr y el conjunto de nodos hoja est formado por la unin de los k conjuntos hojas iniciales. A cada uno de los rboles Ai se les denota ahora subrboles de la raz.

Una sucesin de nodos del rbol, de forma que entre cada dos nodos consecutivos de la sucesin haya una relacin de parentesco, decimos que es un recorrido rbol. Existen dos recorridos tpicos para listar los nodos de un rbol: primero en profundidad y primero en anchura. En el primer caso, se listan los nodos expandiendo el hijo actual de cada nodo hasta llegar a una hoja, donde se vuelve al nodo anterior probando por el siguiente hijo y as sucesivamente. En el segundo, por su parte, antes de listar los nodos de nivel n + 1 (a distancia n + 1 aristas de la raz), se deben haber listado todos los de

nivel n. Otros recorridos tpicos del rbol son preorden, postorden e inorden:
y

y y y y y

El recorrido en preorden, tambin llamado orden previo consiste en recorrer en primer lugar la raz y luego cada uno de los hijos en orden previo. El recorrido en inorden, tambin llamado orden simtrico (aunque este nombre slo cobra significado en los rboles binarios) consiste en recorrer en primer lugar A1, luego la raz y luego cada uno de los hijos en orden simtrico. El recorrido en postorden, tambin llamado orden posterior consiste en recorrer en primer lugar cada uno de los hijos en orden posterior y por ltimo la raz. rbol binario De Wikipedia, la enciclopedia libre Saltar a navegacin, bsqueda Para otros usos de este trmino, vase rbol binario (desambiguacin). En ciencias de la computacin, un rbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener ms de dos hijos (de ah el nombre "binario"). Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman.

Un rbol binario sencillo de tamao 9 y altura 3, con un nodo raz cuyo valor es 2.

En teora de grafos, se usa la siguiente definicin: Un rbol binario es un grafo conexo, acclico y no dirigido tal que el grado de cada vrtice no es mayor a 3. De esta forma slo existe un camino entre un par de nodos. Un rbol binario con enraizado es como un grafo que tiene uno de sus vrtices, llamado raz, de grado no mayor a 2. Con la raz escogida, cada vrtice tendr un nico padre, y nunca ms de dos hijos. Si rehusamos el requerimiento de la conectividad, permitiendo mltiples componentes conectados en el grafo, llamaremos a esta ltima estructura un bosque. Tipos de rboles binarios [editar]
y

Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos. Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura). A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n.

Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

Miercoles, 21 de Abril de 2010 Nombre Password rboles


Entrar

[ Regstrate ]

* * * * * * * *

Definicin de rbol Formas de representacin Nomenclatura sobre rboles Declaracin de rbol binario Recorridos sobre rboles binarios Construccin de un rbol binario rbol binario de bsqueda Problemas

Definicin de rbol Un rbol es una estructura de datos, que puede definirse de forma recursiva como: - Una estructura vaca o - Un elemento o clave de informacin (nodo) ms un nmero finito de estructuras tipo rbol, disjuntos, llamados subrboles. Si dicho nmero de estructuras es inferior o igual a 2, se tiene un rbol binario. Es, por tanto, una estructura no secuencial. Otra definicin nos da el rbol como un tipo de grafo (ver grafos): un rbol es un grafo acclico, conexo y no dirigido. Es decir, es un grafo no dirigido en el que existe exactamente un camino entre todo par de nodos. Esta definicin permite implementar un rbol y sus operaciones empleando las representaciones que se utilizan para los grafos. Sin embargo, en esta seccin no se tratar esta implementacin.

Formas de representacin

- Mediante un grafo:

Figura 1 - Mediante un diagrama encolumnado: a b d c e f

En la computacin se utiliza mucho una estructura de datos, que son los rboles binarios. Estos rboles tienen 0, 1 2 descendientes como mximo. El rbol de la figura anterior es un ejemplo vlido de rbol binario.

Nomenclatura sobre rboles - Raz: es aquel elemento que no tiene antecesor; ejemplo: a. - Rama: arista entre dos nodos. - Antecesor: un nodo X es es antecesor de un nodo Y si por

alguna de las ramas de X se puede llegar a Y. - Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede llegar a X. - Grado de un nodo: el nmero de descendientes directos que tiene. Ejemplo: c tiene grado 2, d tiene grado 0, a tiene grado 2. - Hoja: nodo que no tiene descendientes: grado 0. Ejemplo: d - Nodo interno: aquel que tiene al menos un descendiente. - Nivel: nmero de ramas que hay que recorrer para llegar de la raz a un nodo. Ejemplo: el nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3. - Altura: el nivel ms alto del rbol. En el ejemplo de la figura 1 la altura es 3. - Anchura: es el mayor valor del nmero de nodos que hay en un nivel. En la figura, la anchura es 3. Aclaraciones: se ha denominado a a la raz, pero se puede observar segn la figura que cualquier nodo podra ser considerado raz, basta con girar el rbol. Podra determinarse por ejemplo que b fuera la raz, y a y d los sucesores inmediatos de la raz b. Sin embargo, en las implementaciones sobre un computador que se realizan a continuacin es necesaria una jerarqua, es decir, que haya una nica raz.

Declaracin de rbol binario Se definir el rbol con una clave de tipo entero (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con los hijos se utilizan punteros. El rbol vaco se representar con un puntero nulo. Un rbol binario puede declararse de la siguiente manera:

typedef struct tarbol { int clave; struct tarbol *izq,*der; } tarbol; Otras declaraciones tambin aaden un enlace al nodo padre, pero no se estudiarn aqu.

Recorridos sobre rboles binarios Se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en anchura o a nivel. Puesto que los rboles no son secuenciales como las listas, hay que buscar estrategias alternativas para visitar todos los nodos. - Recorridos en profundidad: * Recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y despus visitar el subrbol izquierdo y una vez visitado, visitar el subrbol derecho. Es un proceso recursivo por naturaleza. Si se hace el recorrido en preorden del rbol de la figura 1 las visitas seran en el orden siguiente: a,b,d,c,e,f. void preorden(tarbol *a) { if (a != NULL) { visitar(a); preorden(a->izq); preorden(a->der); } } * Recorrido en inorden u orden central: se visita el subrbol

izquierdo, el nodo actual, y despus se visita el subrbol derecho. En el ejemplo de la figura 1 las visitas seran en este orden: b,d,a,e,c,f. void inorden(tarbol *a) { if (a != NULL) { inorden(a->izq); visitar(a); inorden(a->der); } } * Recorrido en postorden: se visitan primero el subrbol izquierdo, despus el subrbol derecho, y por ltimo el nodo actual. En el ejemplo de la figura 1 el recorrido quedara as: d,b,e,f,c,a. void postorden(arbol *a) { if (a != NULL) { postorden(a->izq); postorden(a->der); visitar(a); } } La ventaja del recorrido en postorden es que permite borrar el rbol de forma consistente. Es decir, si visitar se traduce por borrar el nodo actual, al ejecutar este recorrido se borrar el rbol o subrbol que se pasa como parmetro. La razn para hacer esto es que no se debe borrar un nodo y despus sus subrboles, porque al borrarlo se pueden perder los enlaces, y aunque no se perdieran se rompe con la regla de manipular una estructura de datos inexistente. Una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este recorrido.

- Recorrido en amplitud: Consiste en ir visitando el rbol por niveles. Primero se visitan los nodos de nivel 1 (como mucho hay uno, la raz), despus los nodos de nivel 2, as hasta que ya no queden ms. Si se hace el recorrido en amplitud del rbol de la figura una visitara los nodos en este orden: a,b,c,d,e,f En este caso el recorrido no se realizar de forma recursiva sino iterativa, utilizando una cola (ver Colas) como estructura de datos auxiliar. El procedimiento consiste en encolar (si no estn vacos) los subrboles izquierdo y derecho del nodo extraido de la cola, y seguir desencolando y encolando hasta que la cola est vaca. En la codificacin que viene a continuacin no se implementan las operaciones sobre colas. void amplitud(tarbol *a) { tCola cola; /* las claves de la cola sern de tipo rbol binario */ arbol *aux; if (a != NULL) { CrearCola(cola); encolar(cola, a); while (!colavacia(cola)) { desencolar(cola, aux); visitar(aux); if (aux->izq != NULL) encolar(cola, aux>izq); if (aux->der != NULL) encolar(cola, aux>der); } } }

Por ltimo, considrese la sustitucin de la cola por una pila en el recorrido en amplitud. Qu tipo de recorrido se obtiene?

Construccin de un rbol binario Hasta el momento se ha visto la declaracin y recorrido de un rbol binario. Sin embargo no se ha estudiado ningn mtodo para crearlos. A continuacin se estudia un mtodo para crear un rbol binario que no tenga claves repetidas partiendo de su recorrido en preorden e inorden, almacenados en sendos arrays. Antes de explicarlo se recomienda al lector que lo intente hacer por su cuenta, es sencillo cuando uno es capaz de construir el rbol viendo sus recorridos pero sin haber visto el rbol terminado. Partiendo de los recorridos preorden e inorden del rbol de la figura 1 puede determinarse que la raz es el primer elemento del recorrido en preorden. Ese elemento se busca en el array inorden. Los elementos en el array inorden entre izq y la raz forman el subrbol izquierdo. Asimismo los elementos entre der y la raz forman el subrbol derecho. Por tanto se tiene este rbol:

A continuacin comienza un proceso recursivo. Se procede a crear el subrbol izquierdo, cuyo tamao est limitado por los ndices izq y der. La siguiente posicin en el recorrido en preorden es la raz de este subrbol. Queda esto:

El subrbol b tiene un subrbol derecho, que no tiene ningn descendiente, tal y como indican los ndices izq y der. Se ha obtenido el subrbol izquierdo completo de la raz a, puesto que b no tiene subrbol izquierdo:

Despus seguir construyndose el subrbol derecho a partir de la raz a. La implementacin de la construccin de un rbol partiendo de los recorridos en preorden y en inorden puede consultarse aqu (en C).

rbol binario de bsqueda Un rbol binario de bsqueda es aquel que es: - Una estructura vaca o - Un elemento o clave de informacin (nodo) ms un nmero finito -a lo sumo dos- de estructuras tipo rbol, disjuntos, llamados subrboles y adems cumplen lo siguiente: * Todas las claves del subrbol izquierdo al nodo son menores que la clave del nodo. * Todas las claves del subrbol derecho al nodo son mayores que la clave del nodo. * Ambos subrboles son rboles binarios de bsqueda.

Un ejemplo de rbol binario de bsqueda:

Figura 5 Al definir el tipo de datos que representa la clave de un nodo dentro de un rbol binario de bsqueda es necesario que en dicho tipo se pueda establecer una relacin de orden. Por ejemplo, suponer que el tipo de datos de la clave es un puntero (da igual a lo que apunte). Si se codifica el rbol en Pascal no se puede establecer una relacin de orden para las claves, puesto que Pascal no admite determinar si un puntero es mayor o menor que otro. En el ejemplo de la figura 5 las claves son nmeros enteros. Dada la raz 4, las claves del subrbol izquierdo son menores que 4, y las claves del subrbol derecho son mayores que 4. Esto se cumple tambin para todos los subrboles. Si se hace el recorrido de este rbol en orden central se obtiene una lista de los nmeros ordenada de menor a mayor. Cuestin: Qu hay que hacer para obtener una lista de los nmeros ordenada de mayor a menor? Una ventaja fundamental de los rboles de bsqueda es que son en general mucho ms rpidos para localizar un elemento que una lista enlazada. Por tanto, son ms rpidos para insertar y borrar elementos. Si el rbol est perfectamente equilibrado -esto es, la diferencia entre el nmero de nodos del subrbol izquierdo y el nmero de

nodos del subrbol derecho es a lo sumo 1, para todos los nodos- entonces el nmero de comparaciones necesarias para localizar una clave es aproximadamente de logN en el peor caso. Adems, el algoritmo de insercin en un rbol binario de bsqueda tiene la ventaja -sobre los arrays ordenados, donde se empleara bsqueda dicotmica para localizar un elemento- de que no necesita hacer una reubicacin de los elementos de la estructura para que esta siga ordenada despus de la insercin. Dicho algoritmo funciona avanzando por el rbol escogiendo la rama izquierda o derecha en funcin de la clave que se inserta y la clave del nodo actual, hasta encontrar su ubicacin; por ejemplo, insertar la clave 7 en el rbol de la figura 5 requiere avanzar por el rbol hasta llegar a la clave 8, e introducir la nueva clave en el subrbol izquierdo a 8. El algoritmo de borrado en rboles es algo ms complejo, pero ms eficiente que el de borrado en un array ordenado. Ahora bien, suponer que se tiene un rbol vaco, que admite claves de tipo entero. Suponer que se van a ir introduciendo las claves de forma ascendente. Ejemplo: 1,2,3,4,5,6 Se crea un rbol cuya raz tiene la clave 1. Se inserta la clave 2 en el subrbol derecho de 1. A continuacin se inserta la clave 3 en el subrbol derecho de 2. Continuando las inserciones se ve que el rbol degenera en una lista secuencial, reduciendo drsticamente su eficacia para localizar un elemento. De todas formas es poco probable que se de un caso de este tipo en la prctica. Si las claves a introducir llegan de forma ms o menos aleatoria entonces la implementacin de operaciones sobre un rbol binario de bsqueda que vienen a continuacin son en general suficientes. Existen variaciones sobre estos rboles, como los AVL o RedBlack (no se tratan aqu), que sin llegar a cumplir al 100% el criterio de rbol perfectamente equilibrado, evitan problemas como el de obtener una lista degenerada.

Operaciones bsicas sobre rboles binarios de bsqueda - Bsqueda Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores sobre el rbol para localizarlo. El resultado es idntico al de una bsqueda secuencial. Aprovechando las propiedades del rbol de bsqueda se puede acelerar la localizacin. Simplemente hay que descender a lo largo del rbol a izquierda o derecha dependiendo del elemento que se busca. boolean buscar(tarbol *a, int elem) { if (a == NULL) return FALSE; else if (a->clave < elem) return buscar(a->der, elem); else if (a->clave > elem) return buscar(a->izq, elem); else return TRUE; } - Insercin La insercin tampoco es complicada. Es ms, resulta practicamente idntica a la bsqueda. Cuando se llega a un rbol vaco se crea el nodo en el puntero que se pasa como parmetro por referencia, de esta manera los nuevos enlaces mantienen la coherencia. Si el elemento a insertar ya existe entonces no se hace nada. void insertar(tarbol **a, int elem) { if (*a == NULL) { *a = (arbol *) malloc(sizeof(arbol));

(*a)->clave = elem; (*a)->izq = (*a)->der = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->der, elem); else if ((*a)->clave > elem) insertar(&(*a)->izq, elem); } - Borrado La operacin de borrado si resulta ser algo ms complicada. Se recuerda que el rbol debe seguir siendo de bsqueda tras el borrado. Pueden darse tres casos, una vez encontrado el nodo a borrar: 1) El nodo no tiene descendientes. Simplemente se borra. 2) El nodo tiene al menos un descendiente por una sola rama. Se borra dicho nodo, y su primer descendiente se asigna como hijo del padre del nodo borrado. Ejemplo: en el rbol de la figura 5 se borra el nodo cuya clave es -1. El rbol resultante es:

3) El nodo tiene al menos un descendiente por cada rama. Al borrar dicho nodo es necesario mantener la coherencia de los enlaces, adems de seguir manteniendo la estructura como un rbol binario de bsqueda. La solucin consiste en

sustituir la informacin del nodo que se borra por el de una de las hojas, y borrar a continuacin dicha hoja. Puede ser cualquier hoja? No, debe ser la que contenga una de estas dos claves: la mayor de las claves menores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 2. la menor de las claves mayores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 5. El algoritmo de borrado que se implementa a continuacin realiza la sustitucin por la mayor de las claves menores, (aunque se puede escoger la otra opcin sin prdida de generalidad). Para lograr esto es necesario descender primero a la izquierda del nodo que se va a borrar, y despus avanzar siempre a la derecha hasta encontrar un nodo hoja. A continuacin se muestra grficamente el proceso de borrar el nodo de clave 4:

Codificacin: el procedimiento sustituir es el que desciende por el rbol cuando se da el caso del nodo con descencientes por ambas ramas. void borrar(tarbol **a, int elem) {

void sustituir(tarbol **a, tarbol **aux); tarbol *aux; if (*a == NULL) /* no existe la clave */ return; if ((*a)->clave < elem) borrar(&(*a)->der, elem); else if ((*a)->clave > elem) borrar(&(*a)->izq, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->izq == NULL) *a = (*a)->der; else if ((*a)->der == NULL) *a = (*a)->izq; else sustituir(&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */ free(aux); } }

Ficheros relacionados Implementacin de algunas de las operaciones sobre rboles binarios.

Ejercicio resuelto Escribir una funcin que devuelva el numero de nodos de un rbol binario. Una solucin recursiva puede ser la siguiente: funcion nodos(arbol : tipoArbol) : devuelve entero; inicio si arbol = vacio entonces devolver 0;

en otro caso devolver (1 + nodos(subarbol_izq) + nodos(subarbol_der)); fin Adaptarlo para que detecte si un rbol es perfectamente equilibrado o no.

Problemas propuestos rboles binarios: OIE 98. (Enunciado)

Aplicacin prctica de un rbol Se tiene un fichero de texto ASCII. Para este propsito puede servir cualquier libro electrnico de la librera Gutenberg o Cervantes, que suelen tener varios cientos de miles de palabras. El objetivo es clasificar todas las palabras, es decir, determinar que palabras aparecen, y cuantas veces aparece cada una. Palabras como 'nio'-'nia', 'vengo''vienes' etc, se consideran diferentes por simplificar el problema. Escribir un programa, que recibiendo como entrada un texto, realice la clasificacin descrita anteriormente. Ejemplo: Texto: "a b'a c. hola, adios, hola" La salida que produce es la siguiente: a2 adios 1 b1 c1 hola 2 Ntese que el empleo de una lista enlazada ordenada no es

una buena solucin. Si se obtienen hasta 20.000 palabras diferentes, por decir un nmero, localizar una palabra cualquiera puede ser, y en general lo ser, muy costoso en tiempo. Se puede hacer una implementacin por pura curiosidad para evaluar el tiempo de ejecucin, pero no merece la pena. La solucin pasa por emplear un rbol binario de bsqueda para insertar las claves. El valor de log(20.000) es aproximadamente de 14. Eso quiere decir que localizar una palabra entre 20.000 llevara en el peor caso unos 14 accesos. El contraste con el empleo de una lista es simplemente abismal. Por supuesto, como se ha comentado anteriormente el rbol no va a estar perfectamente equilibrado, pero nadie escribe novelas manteniendo el orden lexicogrfico (como un diccionario) entre las palabras, asi que no se obtendr nunca un rbol muy degenerado. Lo que est claro es que cualquier evolucin del rbol siempre ser mejor que el empleo de una lista. Por ltimo, una vez realizada la lectura de los datos, slo queda hacer un recorrido en orden central del rbol y se obtendr la solucin pedida en cuestin de segundos. Una posible definicin de la estructura rbol es la siguiente: typedef struct tarbol { char clave[MAXPALABRA]; int contador; /* numero de apariciones. Iniciar a 0 */ struct tarbol *izq, *der; } tarbol;

Versin del artculo con cdigo fuente en Pascal

( ALGORITMIA # 10/06/2004 14:01:16 )

(2001-2008) ALGORITMIA.NET - Poltica de privacidad

4. rboles binarios. Los rboles de grado 2 tienen una especial importancia. Se les conoce con el nombre de rboles binarios. Se define un rbol binario como un conjunto finito de elementos (nodos) que bien est vaci o est formado por una raz con dos rboles binarios disjuntos, llamados subrbol izquierdo y derecho de la raz. En los apartados que siguen se considerarn nicamente rboles binarios y, por lo tanto, se utilizar la palabra rbol para referirse a rbol binario. Los rboles de grado superior a 2 reciben el nombre de rboles multicamino. rbol binario de bsqueda.- Los rboles binarios se utilizan frecuentemente para representar conjuntos de datos cuyos elementos se identifican por una clave nica. Si el rbol est organizado de tal manera que la clave de cada nodo es mayor que todas las claves su subrbol izquierdo, y menor que todas las claves del subrbol derecho se dice que este rbol es un rbol binario de bsqueda. Ejemplo:

Operaciones bsicas.- Una tarea muy comn a realizar con un rbol es ejecutar una determinada operacin con cada uno de los elementos del rbol.Esta operacin se considera entonces como un parmetro de una tar ms general que es la visita de todos los nodos o, como se denomina usualmente, del recorrido del rbol. Si se considera la tarea como un proceso secuencial, entonces los nodos individuales se visitan en un orden especfico, y pueden considerarse como organizados segn una estructura lineal. De hecho, se simplifica considerablemente la descripcin de muchos algoritmos si puede hablarse del proceso del siguiente elemento en el rbol, segn un cierto orden subyacente. Hay dos formas bsicas de recorrer un rbol: El recorrido en amplitud y el recorrido en profundidad. Recorrido en amplitud.- Es aquel recorrido que recorre el rbol por niveles, en el ltimo ejemplo sera: 12 - 8,17 - 5,9,15 Recorrido en profundidad.- Recorre el rbol por subrboles. Hay tres formas: Preorden, orden central y postorden. Preorden: Raiz, subrbol izquierdo y subrbol derecho. Orden central: Subarbol izquierdo, raiz, subarbol derecho. Postorden: Subarbol izquierdo, subarbol derecho, raiz.

Ejemplo: Preorden: 20 - 12 - 5 - 2 - 7 - 13 - 15 - 40 - 30 - 35 - 47 Orden central: 2 - 5 - 7 - 12 - 13 - 15 - 20 - 30 - 35 - 40 - 47

Postorden: 2 - 7 - 5 - 15 - 13 - 12 - 35 - 30 - 47 - 40 - 20 Ejemplo: Preorden: / + a b * c d Notacin polaca Orden central: a + b / c * d Notacin infija Postorden: a b + c d * / Notacin polaca inversa Estructura de datos Variables Las variables son estructura de datos usados para almacenar informacin. Hay dos tipos de informacin que puede ser almacenada: Nmeros y texto. Antes de usar una variable sta, deber primero ser definida: Dim nombre_de_variable As Tipo Ejemplo: Dim precio As Long Dim nombre_de_articulo As String
Tipo Integer Long Rango permitido -32,768 32,767 2,147,483,647 -1.401298 -45 3.402823 38 -4.94065645841247D-324 1.79769313486232D308

-2,147,483,648 -3.402823 38

Single 1.401298 -45

-1.79769313486232D308 Double 4.94065645841247D-324

Currency

-922337203685477.5808 0 65,000 bytes

922337203685477.5807

String

V lores de fech s: 1/1/0000 Variant Numrico: igu l que Double Texto: Igu l que Stri g

12/32/9999

Si u uev v ri ble es decl r d si especific ci VB por def ult l deber tom r como tipo V ri t

Una vez que una variable se ha creado, se le puede asignar un valor. Para esto se usa el operador ' = '. En el primer ejemplo de abajo a una variable se le asigna un valor constante, mientras que en el segundo se le asigna el contenido de una variable multiplicada por 10. Ejemplo 1: precio = 29.95 Ejemplo 2: precio_total = precio * 10 El Alcance de una variable es definido como su rango de operacin. Hay tres tipos de alcance en una variable: 1. Local - La variable solo puede ser usada en el procedimiento actual ( use Dim dentro del procedimiento requerido). 2. 3. Mdulo - La variables pueden ser accesadas desde cualquier procedieminento de la forma actual (use Dim dentro de la seccin de Declaraciones Generales de la forma).

4. Global - Pueden ser accesados desde cualquier procedimiento y desde cualquier forma. (usa Global dentro de la seccin de Declaraciones Generales de un mdulo). Variables Estticas El declarar variables y arreglos como local en un procedimieneto/funcin es muy usado, porque esto minimza los efectos extraos que pueden ocurrir cuando se usan variables globales. Sin embargo, cuando usamos una variable local en un procedimiento VB crea un espacio de memoria para mantener el valor de esta variable , esto sucede cuando lee el estatuto Dim, pero cuando llega al final del procedimiento (End Sub) VB libera el espacio asigndo para el valor de la variable local. Agrega el siguiente cdigo a un botn de comando y observa que valores son impresos: Sub Command1_Click () Dim numero As Integer ' Crea una variable Local normal numero = numero + 1 Print numero End Sub Despus de dar clic varias veces al botn de comando debers ver una columna de unos en el lado izquierdo de la forma. El valor nunca ser arriba de uno a pesar de que el valor de la variable se incrementa en uno cada vez. Esto es porque cada vez que el procediemineto es llamado, haciendo clic en el botn, VB esta trabajan con una variable diferente. Esta tiene exactamente el mismo nombre en el programa pero es una variable completamente diferente. Para que esto no suceda as, introduce Staticen el lugar de Dim: Sub Command1_Click () Static numero As Integer ' Crea una variable esttica local numero = numero + 1

Print numero End Sub Ahora en vez de que el valor de la variable se pierda cuando el procedimiento termina, con este cambio (static) su valor permanecer hasta que todo el programa termine. De esta manera, podemos ver una lista de nmeros que se incrementan en uno cada vez que se le da clic al botn de comando. Nota: La nueva variable esttica es una variable de alcance local, si cualquier procedimiento trata de accesar esta variable no prodr lograrlo. Agrega a la forma un nuevo botn de comando, el cual deber tener un nuevo procedimiento 'Click', y trata de corregir o imprimir el valor de la variable esttica que contiene el primer botn. El contenido de un arreglo local, tambin puede mantenerse mientras el programa se ejecute. Para hacer esto agrega el estatuto 'Static' en lugar de 'Dim' como lo hicimos en el ejemplo de arriba. Static salarios(199) As Long 5. Variables Constantes Las constantes son similares a una variable pero tienen un valor determinado que se mantiene igual en toda la ejecucin del programa. El contenido de una varible puede cambiar tantas veces sea necesario. Porque usar una constante si no puede cambiar de valor?. Hacemos esto cuando deseamos usar un mismo nmero o una palabra (string) varias veces. Por ejemplo, en un programa para calcular los impuestos de todo el ao, deber hacer referencia a un valor en varias partes del programa, que puede ser el por ciento de impuesto mensual con respecto a las ganancias. Par ello podemos usar una variable llamada IMP, que mantendr el valor en el evento Form_Load. En el siguiente ejemplo definimos una contante llamada ' IMP ' y le asignamos el valor de 1.175. Ese es usado en estatuto Print con la variable pago_total para calcular la cantidad total a pagar. Note

que en lugar de escribir 1.175 en la frmula nos referimos a el nombre de la constante. Ejemplo: Const IMP = 1.175 ' Declara y asigna un valor a la constante Dim pago_total As Currency ' Declara una variable local para almacenar el total a pagar pago_total = 560.95 Print "Total = "; pago_total * IMP Como las variables las constantes tambin tiene reglas de alcance. Hay constantes globales que pueden ser accesadas por cualquier mdulo o cualquier forma del proyecto, las constantes de mdulo solo son accesadas por la foma que los contiene, y las contantes locales son accesadas solamente por el objeto actual o procedimiento/funcin. 1. Local - usa 'Const' dentro del procedimiento requerido. 2. 3. Mdulo - usa 'Const' dentro de la seccin deDeclaraciones Generales de una forma o mdulo. 4. Global - usa 'Global Const' dentro de la seccin deDeclaraciones Generales de un mdulo (sto es Module1.bas). Arreglos (arrays) La variables son muy usadas para lamacenar pequeas cantidades de informacin, pero no son convenientes para grandes cantidades de informacin muy similar. Por ejemplo, para almacenar los salarios de doscientos empleados, necesitaremos 200 variables diferentes. Una mejor forma de almacenar esta informacin ser usra una estructura de datos llamada arreglos array. Un arreglo es similar a las celdas en un panal de abejas. Todo el arreglo tiene un nombre, y cada celda tiene una direccin. Para el problema de los salarios planteado arriba, un arreglo el cual tiene

200 elementos (celdas) , usaremos el comando Dim para cerar un nueva variable, pero marcaremos tambin el tamao de esta variable . Dim nombre_del_arreglo (tamao) [As Tipo] Ejemplo: Dim salarios(199) As Long En el ejemplo de arriba creamos un arreglo con 200 elementos. El tamao marcado es de 199 porque por default VB empieza la numeracin con 0. Si sabemos que el nombre 'Jaime ' es el empleado nmero 24 y tiene un salario de 25,000 pesos mensuales, podemos lintroducir esta cantidad en el arreglo de la siguiente forma: salarios(23) = 25000 Contrario a lo anterior, si deseamos saber cula es el salario del empleado nmero 189, podemos usar: lblvalor.Caption = salarios(188) Nota: En los dos ejemplos anteriores, para accesar un elemento es necesario colocar el nmero del elemento anterior (si deseamos el 150, pedimos el 149). esto es VB empieza un arreglo de 0, no de 1. Sin embargo VB pude ser forzado a empezar con 1, agregando el estatuto 'Option Base 1' en la seccin de declaraciones generales de la forma o el mdulo.

También podría gustarte