Anda di halaman 1dari 21

UNIVERSIDAD NACIONAL DE TRUJILLO

rboles

2011
Integrantes Acate Venegas, Karen Chavez Panduro, Elmer Alfredo Rubio Ludwing Navez Marios, Alex Docente Gutierrez Gutierrez Jorge Luis

O R G A N I Z A C IPginaD E N 1

ARCHIVOS

rboles

ndice

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.

Introduccin................................................................................................................ 3 Definicin...................................................................................................................... 4 Representacin de un rbol ................................................................................. 5 RBOL BINARIO .......................................................................................................... 6 Tipos de Arboles ......................................................................................................... 8 Estructura de Datos del rbol Binario ............................................................. 9 rboles Binarios de Bsqueda (ABB) ................................................................ 9 Conversin de un rbol general en un rbol binario .............................. 10 Recorridos de un rbol de Bsqueda Binaria (ABB)................................. 10 Insercin en un ABB ............................................................................................... 12 Eliminar un nodo .................................................................................................... 12 IMPLEMENTACION DE ARBOLES BINARIOS EN C++ ..................................... 13 CONCLUSIONES.......................................................................................................... 21 Bibliografa ................................................................................................................ 21

Pgina 2

rboles

1. Introduccin
Al igual que ocurra con las estructuras de datos vistas en los temas anteriores, todo el mundo tiene claro el concepto de rbol, al menos en su aspecto botnico. Sin embargo, los rboles no son slo eso de lo que estamos rodeados cuando nos perdemos en un bosque, sino que tambin se usan en otros muchos mbitos. As por ejemplo, todos hemos manejado alguna vez el concepto de rbol genealgico, o hemos visto clasificaciones jerrquicas como las del reino animal. En todos esos casos manejamos el concepto de rbol. Centrndonos en el mundo de la informtica, los rboles se utilizan en distintos mbitos. Por ejemplo, al organizar la informacin para facilitar la bsqueda en un disco duro, utilizamos una estructura de directorios y subdirectorios en forma de rbol. Tambin se usan los rboles asociados a distintos esquemas para el desarrollo de los algoritmos, tales como la programacin dinmica, la ramificacin y poda, el esquema divide y vencers, etc.

Si nos referimos a estructuras de datos, ya dijimos en el tema anterior que las pilas, colas y listas son estructuras lineales, puesto que en todas ellas cada elemento tiene un nico elemento anterior y un nico elemento posterior. Pero, adems, existen estructuras de datos no lineales, en las que esta restriccin desaparece. Esto es, en estas estructuras cada elemento puede tener varios anteriores y/o varios posteriores.

Pgina 3

rboles

2. Definicin
Una de las estructuras los datos ms importantes y prominentes que existen es el rbol. No es un rbol en el sentido botnico de la palabra, sino uno de naturaleza ms abstracta. Todos hemos visto usar tales rboles para describir conexiones familiares. Los dos tipos ms comunes de rboles familiares son el rbol de antecesores, que empieza en un individuo y va hacia atrs a travs de padres, abuelos, etc., y el rbol de descendientes, que va hacia delante a travs de hijos, nietos, etc. Si aadimos a los rboles la restriccin de que cada elemento puede tener un solo posterior, llegamos a las estructuras lineales, y ms concretamente a las listas. As pues, las listas no son ms que un caso particular de los rboles. En este punto, si aadimos ciertas restricciones de acceso a las listas llegamos a las colas o a las pilas. Por lo tanto, tanto colas como pilas, son tipos particulares de listas. En definitiva, grficamente podemos ver la relacin entre las distintas estructuras comentadas del siguiente modo:

Los rboles son entonces un subconjunto importante de los grafos, y son una herramienta til para describir estructuras que representan algn tipo de jerarqua. Un rbol dirigido tiene un nodo al que sele llama "raz" y de este nodo parten todas las conexiones a los dems nodos. A los nodos terminales se les llama "hojas" y a todos los dems se les llama nodos intermedios. De acuerdo al nmero de arcos que parten de cada nodo en un rbol, este se puede clasificar en diferentes categoras. As se tienen rboles binarios, rboles2-3-4, rboles rojonegro, rboles B, etc.

Pgina 4

rboles
A los nodos que dependen de otro nodo tambin se les conoce como nodos "hijos" o descendientes y al otro se le llama nodo "padre". De esto de puede concluir que cada nodo padre es una raz de un sub-rbol. El nmero de sub-rboles que tiene un nodo determinan el grado del nodo. Naturalmente el grado de las hojas es de cero. Por convencin al nodo raz de rbol se le considera el nivel cero del rbol. Cuando se tienen varios rboles en un conjunto, al conjunto se le llama bosque. Altura de un nodo: Es la longitud del camino ms largo desde el nodo hasta una hoja que sea descendiente de este nodo. Altura de un rbol = altura del nodo raz. Para poder realizar bsquedas eficientes en rboles se manejan dos caractersticas: Los rboles pueden estar balanceados por altura o por peso. rbol balanceado por altura: en dnde todos los hijos o nodos hoja se intentan mantener a la misma distancia de la raz. rbol balanceado por peso: en dnde los nodos ms visitados o utilizados se mantienen a poca distancia de la raz.

3. Representacin de un rbol
Mediante diagramas de Venn

Mediante crculos y flechas

Mediante parntesis anidados: ( a ( b (e,f), c, d ) )

Pgina 5

rboles

4. RBOL BINARIO
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.

Veamos algunas definiciones bsicas: Nodo Padre de un nodo N es aquel que apunta al mismo. En un rbol cada nodo slo puede tener un padre. Nodo Hijo de otro nodo A es cualquier nodo apuntado por el nodo A. Un nodo puede tener varios hijos. Nodo Raz es el nico del rbol que no tiene padre. En la representacin que hemos utilizado, el nodo raz es el que se encuentra en la parte superior del rbol: A. Hojas son todos los nodos que no tienen hijos. Nodos Interiores son los nodos que no son ni el nodo raz, ni nodos hoja. En el Camino es una secuencia de nodos, en el que dos nodos consecutivos cualesquiera son padre e hijo. Rama es un camino desde el nodo raz a una hoja. Altura es el mximo nmero de nodos de las ramas del rbol. Dicho en otros trminos, el mximo nmero de nodos que hay que recorrer para llegar de la raz a una de las hojas. Grado es el nmero mximo de hijos que tienen los nodos del rbol. As, en el ejemplo anterior el rbol es de grado dos. Dmonos cuenta de que una lista no es ms que un rbol de grado uno. Nivel de un nodo, es el nmero de nodos del camino desde la raz hasta dicho nodo.

Pgina 6

rboles
Un rbol ordenado: Es aquel en el que las ramas de los nodos estn ordenadas. Los de grado 2 se llaman rboles binarios. Cada rbol binario tiene un subrbol izquierda y subrbol derecha.

rboles de expresin Representan un orden de ejecucin

(A* B) + C * D + E

(7 + 12) * (-9) -171

rboles similares: Los que tienen la misma estructura (forma)

rboles Equivalentes: Son los rboles similares y sus nodos contienen la misma informacin. rboles n-ario: Es un rbol ordenado cuyos nodos tiene N sub-rboles, y donde cualquier nmero de sub-rboles puede ser rboles vaco.

Pgina 7

rboles
5. Tipos de Arboles
Existen diferentes tipos de arboles binarios, aqu les dejo la definicin. *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).

Recorridos sobre los arboles binarios. Existen distintos recorridos los cuales vimos hoy en clase. Explicare cada uno de ellos dando un ejemplo.

Pre orden Este tipo de recorrido se realiza, primero se imprime la Raz, despus el hijo izquierdo (subrbol izquierdo), y por ltimo hijo derecho (subrbol derecho). Lo correspondiente al recorrido pre orden de la imagen anterior sera: 2, 6, 5, 2, 9,11,7, 8, 3. Post-orden Este tipo de recorrido se realiza, primero el hijo izquierdo, hijo derecho y al final la raz. Lo correspondiente al recorrido Post-orden de la imagen sera: 5, 9, 11, 2, 6, 3, 8, 7, 2. In-orden Este tipo de recorrido se realiza primero hijo izquierdo, raz, y al final hijo derecho. Lo correspondiente al recorrido In-orden de la imagen sera: 5, 6, 9, 2, 11, 2, 7, 8, 3. Amplitud o por niveles En este caso se realiza en orden por los distintos niveles del rbol, se comenzara con el nivel 1, que solo es la raz, seguidamente el nivel 2, el 3 y as sucesivamente. 2, 6, 7, 5, 2, 8, 9, 11, 3.

Pgina 8

rboles
6. Estructura de Datos del rbol Binario
Typedef int TipoElemento Typedef struct nodo { TipoElemento dato struct nodo *izq struct nodo *der } Nodo Typedef Nodo* ArbolBinario

7. rboles Binarios de Bsqueda (ABB)


Un rbol es un ABB si ste es binario y sus nodos son sub-rboles de bsqueda binarios y contienen informacin ordenada de tal que todos los elementos a la izquierda de la raz son menores a la raz y todos los elementos a la derecha de la raz son mayores a la raz.

Pgina 9

rboles
8. Conversin de un rbol general en un rbol binario
Los hermanos se enlazan en forma horizontal (lineal) Se enlaza en forma vertical el padre con el hijo que se encuentra ms a la izquierda y se elimina el enlace de este padre con los dems hijos. Se rota el diagrama resultante 45 grados hacia la izquierda.

9. Recorridos de un rbol de Bsqueda Binaria (ABB)


Recorrido en pre orden (prefijo) Visita la raz. Recorre el subrbol izquierdo. Recorre el subrbol derecho.

Pgina 10

Recorrido en in-orden (infijo) Recorre el subrbol izquierdo. Visita la raz Recorre el subrbol derecho

Recorrido en post-orden (postfijo) Recorre el subrbol izquierdo. Recorre el subrbol derecho. Visita la raz.

Pgina 11

rboles

10.

Insercin en un ABB

Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condiciones a. b. El subrbol derecho es igual a vaci, o el subrbol izquierdo es igual a vaci; en cuyo caso se proceder a insertar el elemento en el lugar que le corresponde. El valor o dato que quiere insertarse es igual a la raz del rbol; en cuyo caso no se realiza la insercin.

Supngase que quieren insertarse las siguientes los siguientes datos en un rbol binario de bsqueda que se encuentra vaci. 120 87 43 65 140 99 130 22 56

11.
1.

Eliminar un nodo
Si el elemento a borrar es Terminal (hoja),

Para eliminar un nodo existen los siguientes casos:

2. Si el elemento a borrar tiene un solo hijo, 3. Si el elemento a borrar tiene los dos hijo Caso 2 Si el elemento a borrar tiene un solo hijo, entonces tiene que sustituirlo por el hijo

Pgina 12

rboles

12. IMPLEMENTACION DE ARBOLES BINARIOS EN C++


#include <cstdlib> #include <iostream> #include <IO.h> #include <string.h> #include <sys\STAT.h> #include <FCNTL.h> using namespace std; long int pos=0; int fd = 0,ld,le; struct encabezado{ int NRS; int RZ; }e; struct datos{ int NR; char nom[20]; int ptje; int PI; int PD; }r,s;

void imprimeregistro(struct datos t) { cout<<"Nr:"<<t.NR<<" "<<t.nom<<" "<<t.ptje<<" "<<t.PI<<" "<<t.PD<<endl; }

Pgina 13

rboles
void escribir() { char rpta,lado; int x=0; bool band; if((fd = creat("a1.txt",S_IWRITE | S_IREAD)) < 0)//devuelve un entero si es q lo logra crear { cout<<"No se pudo crear"<<endl; system("PAUSE"); exit(0); }

le = sizeof(struct encabezado); ld = sizeof(struct datos); lseek(fd,le,0); e.RZ = -1; e.NRS = 0; r.NR = 0;

do{ fflush(stdin); e.NRS = ++r.NR; cout<<"Nombre: ";gets(r.nom); fflush(stdin); cout<<"Puntaje: ";cin>>r.ptje; r.PD = -1; r.PI = -1; if(e.RZ == -1) { e.RZ = r.NR;

Pgina 14

rboles
cout<<"RAIZ: "<<e.RZ<<endl; } else { x = e.RZ; cout<<"X: "<<x<<endl; do{ pos = (x-1)*ld + le; lseek(fd,pos,0); read(fd,&s,ld); imprimeregistro(s); if(strcmp(r.nom,s.nom)> 0) { x = s.PD; lado = 'd'; } if(strcmp(r.nom,s.nom)< 0) { x = s.PI; lado = 'i'; } }while(x != -1); if(lado == 'd') { s.PD = r.NR; } if(lado == 'i') { s.PI = r.NR; }

Pgina 15

rboles
pos = (s.NR-1)*ld +le; lseek(fd,pos,0); cout<<"se actualizara s:"<<endl; imprimeregistro(s); write(fd,&s,ld);

} //lseek(fd,0,2); pos = (r.NR-1)*ld +le; lseek(fd,pos,0); imprimeregistro(r); write(fd,&r,ld); cout<<"INGRESAR MAS REGISTROS (S/N): "<<endl; cin>>rpta; }while(rpta == 's'); lseek(fd,0,0); write(fd,&e,le); close(fd); }

void leer() { if((fd = open("a1.txt",O_TEXT)) < 0)//devuelve un entero si es q lo logra crear { cout<<"No se pudo abrir"<<endl; system("PAUSE"); exit(0); } le = sizeof(struct encabezado); ld = sizeof(struct datos);

Pgina 16

rboles
read(fd,&e,le); cout<<"RAIZ : "<<e.RZ<<" NRS : "<<e.NRS<<endl; while(read(fd,&r,ld) > 1) { imprimeregistro(r); } close(fd); } void buscar() {int x,band=0,pos;

char nombre[20]; if((fd = open("a1.txt",O_TEXT)) < 0)//devuelve un entero si es q lo logra crear { cout<<"No se pudo abrir"<<endl; system("PAUSE"); exit(0); } le = sizeof(struct encabezado); ld = sizeof(struct datos); read(fd,&e,le); cout<<"nombre:"; fflush(stdin); gets(nombre); x=e.RZ;

while(x!=-1) { pos = (x-1)*ld +le; lseek(fd,pos,0);

Pgina 17

rboles
read(fd,&s,ld); if(strcmp(nombre,s.nom)>0) { x=s.PD; continue; }

if(strcmp(nombre,s.nom)<0) { x=s.PI; continue; } band=1; cout<<"puntaje: "<<s.ptje<<endl;break; } if(band==0) { cout<<"no existe registro"; } close(fd); }

void max_izq() {int x,band=0,pos,maxizq; struct datos max;

char nombre[20]; if((fd = open("a1.txt",O_TEXT)) < 0)//devuelve un entero si es q lo logra crear { cout<<"No se pudo abrir"<<endl;

Pgina 18

rboles
system("PAUSE"); exit(0); } le = sizeof(struct encabezado); ld = sizeof(struct datos); read(fd,&e,le); cout<<"Nodo a eliminar:"<<endl; fflush(stdin); gets(nombre); x=e.RZ; while(x!=-1) { pos = (x-1)*ld +le; lseek(fd,pos,0); read(fd,&s,ld); if(strcmp(nombre,s.nom)>0) { x=s.PD; continue; }

if(strcmp(nombre,s.nom)<0) { x=s.PI; continue; } band=1; //algoritmo mximo izquierdo maxizq = s.PI; if(maxizq!=-1)

Pgina 19

rboles
{ pos = (maxizq-1)*ld + le; lseek(fd,pos,0); read(fd,&max,ld); while(max.PD != -1) { pos =(max.PD-1)*ld + le; lseek(fd,pos,0); read(fd,&max,ld); } cout<<"Maximo izquierdo "<<max.nom<<endl; } else cout<<"Nodo no tiene maximo izquierdo"<<endl; break; }

if(band==0) { cout<<"no existe registro"; } close(fd); }

int main(int argc, char *argv[]) { int op; do{ cout<<"1.escribir 2.leer 3.buscar 4.maxizq 5.salir"<<endl;

Pgina 20

rboles
cin>>op; switch(op){ case 1: escribir();break; case 2: leer();break; case 3: buscar();break; case 4: max_izq();break; case 5: break; }; }while(op!=5); system("PAUSE"); return EXIT_SUCCESS; }

13.

CONCLUSIONES
Hemos logrado explicar cmo funciona los arboles binarios y lo fcil que es desarrollarlos

14.

Bibliografa
http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf http://www.iuma.ulpgc.es/users/jmiranda

/docencia/programacion/Tema7_ne.pdf http://www.virtual.unal.edu.co/cursos/ingenieria/2001412/capitulos/cap6/63.html http://www.lcc.uma.es/~lopez/lp2/

Pgina 21

Anda mungkin juga menyukai