You are on page 1of 6

Definicin de rboles Es una estructura jerrquica aplicada sobre una coleccin de elementos u objetos llamados nodos; uno de los

s cuales es conocido como raz. Un rbol de tipo T como una estructura homogenea, que es la concatenacion de un elemento tipo T junto con un nmero finito de rboles disjuntos, llamados subrboles Algunas Caracteristicas y propiedades de los arboles Todo arbol que no este vacio, tiene un nodo unico raiz Si un nodo X es apuntado por el nodo Y. Se dice que X es hijo de Y X es antesesor de Y si el nodo X apunta al nodo Y. X es padre de Y Todos los nodos que son descendientes directos(hijos) de un mismo nodo(padre), son hermanos. Si un nodo no tiene ramificaciones (hijos), se conoce con el nombre de terminal u hoja Todo nodo que no es raiz, ni hoja se conoce como nodo interior. Grado es el numero de descendientes directos de un nodo, grado de un arbol es el maximo grado de todos los nodos del arbol Nivel es el numero de arcos que deben recorrerse para lleagar a un nodo. Raiz tiene nivel 1 Altura del arbol es el maximo nmero de niveles de todos los nodos del rbol. rboles Binarios Un arbol binario cada nodo puede tener como maximo dos subarboles y siempre es necesario distinguir entre el subarbol izquierdo y el subarbol derecho Arbol binario tipo T es una estructura homogenea que es la concatenacion de un elemento tipo T, llamado raiz, con dos arboles binarios disjuntos, llamados subarbol izquierdo y subarbol derecho. Se pueden aplicar para representar un arbol genealogico o para representar expresiones algebraicas construidas con operadores binarios Distintos. Cuando sus estructuras son diferentes Similares. Cuando sus estructuras son identicas pero la informacion que contiene cada arbol es diferente. Equivalentes. Cuando son similares y ademas la informacion es identica entre los dos arboles. Se dice que un rbol binario est lleno si es un rbol binario de profundidad k que tiene (2^k) - 1 nodos. Un rbol binario lleno es aquel que contiene el nmero mximo de

posibles nodos. Como en estos casos no existen subrboles vacos excepto para los nodos terminales. Un rbol binario con n nodos y profundidad k se dice que es completo si y slo si sus nodos se corresponden con los nodos numerados de 1 a n en el rbol binario lleno de profundidad k. Definimos un rbol binario completo (ABC) como un A.B.lleno pero con sus hojas dispuestas de tal manera que las hojas del nivel ms bajo estn situadas tan a la izquierda como sea posible. Estructuras de datos Heap (montculo) Un rbol completo, es aquel en el que todos los niveles, con excepcin del ltimo, tiene sus nodos completos. Un arbol perfectamente equilibrado hasta el penultimo nivel, y en el ultimo nivel los nodos se encuentran agrupados a la izquierda . Un Heap es un rbol binario completo a izquierda, que permite implementar una cola con prioridad, y donde los elementos se almacenan cumpliendo la propiedad de que la clave de un nodo siempre es mayor (o menor) que la clave de cualquiera de sus hijos. Lo que nos asegura que la raz del rbol, en un Heap, siempre es el elemento mayor (o menor) de la estructura. El acceso a los elementos del Heap en un arreglo, se hace a travs de algunas operaciones aritmticas bsicas: Left(i) : return 2*i .- Obtiene el hijo izquierdo del elemento i. Right(i) : return 2*i +1 .- Obtiene el hijo derecho del elemento i. Parent(i): return floor(i/2) .- Obtiene el padre del elemento i.

Crear un arbol binario Carga(nodo) 1.- Leer informacion(info) 2.- Hacer nodo^.info=info 3.- Escribir Existe nodo por la izquierda? 4.- Leer repuesta 5.- Si respuesta es afirmativa entonces crea(otro) hacer nodo^.izq=otro regresar a carga(nodo^.izq)//llamada recursiva sino hacer nodo^.izq=Nil 6.- fin del paso 5 7.- 3.- Escribir Existe nodo por la derecha? 8.- Leer repuesta 9.- Si respuesta es afirmativa entonces crea(otro) hacer nodo^.der=otro regresar a carga(nodo^.der)//llamada recursiva sino hacer nodo^.der=Nil 10.- fin del paso 9 Recorridos en arboles Recorrido en preorden 1.-Visita la raiz 2.- recorre el subarbol izquierdo 3.- recorre el subarbol derecho Recorrido en inorden 1.- recorre el subarbol izquierdo 2.- Visita la raiz 3.- recorre el subarbol derecho Recorrido en postorden 1.- recorre el subarbol izquierdo

2.- recorre el subarbol derecho 3.- Visita la raiz Algoritmos de Recorridos Preorden(nodo) 1.- Si nodo <>nil entonces visita el nodo(escribir la info del nodo) Regresa preorden(nodo^.izq) Regresa preorden(nodo^.der) 2.- fin del paso 1 Inorden(nodo) 1.- Si nodo <>nil entonces Regresa inorden(nodo^.izq) visita el nodo(escribir la info del nodo) 2.- fin del paso 1

Regresa inorden(nodo^.der)

Postorden(nodo) 1.- Si nodo <>nil entonces Regresa Postorden(nodo^.izq) Regresa postorden(nodo^.der) visita el nodo(escribir la info del nodo)2.- fin del paso 1

Arboles binarios de busqueda Para todo nodo T del arbol debe cumplirse que todos los valores de los nodos del subarbol izquierdo de T seran menores al valor del nodo T y todos los valores de los nodos del subarbor derecho de T deben ser mayores. Si los valores se repiten solo se inserta una vez. Insercion(nodo,info) 1.- Si nodo<>Nil entonces 1.1 Si info<nodo^.info entonces insercion(nodo^.izq,info)

sino 1.1.1 Si info>nodo^.info entonces insercion(nodo^.der,info) sino Escribir informacion ya 1.1.2 fin de 1.1.1 1.2 fin de 1.1 sino crea(otro) otro^.izq=otro^.der=Nil otro^.info=info,nodo=otro. 2.- fin de 1

existente

Bsqueda en un arbol binario de buaqueda Busqueda(nodo,info) 1.- Si nodo<>Nil entonces 1.1 Si info<nodo^.info entonces Busqueda(nodo^.izq,info) sino 1.1.1 Si info>nodo^.info entonces Busqueda(nodo^.der,info) sino Escribir El dato esta en el arbol 1.1.2 fin del paso 1.1.1 1.2 fin del paso 1.1 sino Escribir El dato no esta en el arbol Eliminar un nodo Hay que eliminar un nodo si violar los principios que definen un arbol binario de busqueda. 1.- Si el nodo es terminal u hoja, simplemente se suprime 2.- Si solo tiene un solo descendiente, entonces tiene que sustituirse por ese descendiente 3.- Si tiene dos descendientes, entonces se tiene que sustituir por el nodo que se encuentra mas a la derecha en el subarbol izquierdo o mas a la izquierda en el subarbol derecho. Pero antes de eliminarlo se tiene que encontrar. Para eliminar podemos seleccionar el mas grande del subarbol izquierdo o el mas pequeo del subarbol derecho del nodo a eliminar

Algoritmo de eliminacion Elimina(int k,int e) //elimina el elemento k y guarda el valor en e { nodoarbol *p=root,*pp=NULL; while(p && p->dato!=k)//este recorrido busca el nodo, en pp se guada el padre { pp=p; //del que queremos borrar y en p el nodo a borrar if(k<p->dato) p=p->izq; else p=p->der; } If(!p) cout<<No se encuntra el dato;//si no encontro a k else {e=p->dato; If(p->izq &&p->der) //si tiene dos hijos, encuentra el mas grande del subarbol izquierdo {nodoarbol *s=p->izq,*ps=p; //izquierdo de p while(s->der) { ps=s; s=s->der;} //se mueve al mas grande p->dato=s->dato; //copia el dato del mas grande a p p=s; p=s; pp=ps;} //p tiene por lo menos un hijo, lo guarda en c nodoarbol *c; //p tiene por lo menos un subarbol If(p->izq) c=p->izq; else c=p->der; If(p==root) root=c; else { //identificar si p es el hijo izquierdo o derecho de pp If(p==pp->izq) pp->izq=c; else pp->der=c; } delete p; } //fin del else de que lo encontro

Bibliografa Estructura de datos Autor:Cairo-guardatti Data structures, algorithms, and applications in C++ Autor:Sartaj Sahni

You might also like