UNIVERSIDAD CENTROAMERICANA INTEGRANTES: LUIS CARLOS CAJINA BUSTOS PERLA CASAYA CALERO DANILO AVILES COREA CARRERA: INGENIENIERA EN SISTEMAS Y TECNOLOGIAS DE LA INFORMACION ASIGNATURA: ABSTRACCION Y ESTRUCTURA DE DATOS FECHA: 04 DE DICIEMBRE DEL 2009 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información INDICE Introducción………………………………………………………………………….........................3 Árboles………………………………………………………………………………………………………….4 Representación de un Árbol…………………….…………………………….........................4 Árboles Binarios…………………………………………………………………………………………….4 Árboles Binarios Completos…………………………………………………………………………..5 Árbol Binario Lleno.……………………………………………………………………………………….5 Estructura de un Árbol Binario….…………………………………………………………………..5 Representación de los Árboles Binarios en C++……………………………………………..5 Operaciones Básicas con Árboles Binarios…………………………………………………….6 Conclusiones…………………………………………………………………………………………………8 Bibliografía……………………………………………………………………………………………………8 Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 2 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información INTRODUCCIÓN Este documento se realizó con el objetivo de brindar mayor conocimientos sobre lo que se refiere al lenguaje en C++ con respecto a los árboles. Con la realización de esta investigación aseguramos haber adquirido conocimientos sobre los arboles en C++, recopilando información de páginas en internet calificadas para la tarea como también libros específicos de estructuras de datos. Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 3 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información Árboles Son estructuras en la que los datos se organizan conformando un orden jerárquico, los elementos se relacionan entre sí a través de ramas, los ejemplos comunes son el árbol genealógico, un organigrama, etc. Algunos conceptos relacionados a los árboles son: Los árboles constan de nodos y ramas que conectan a los nodos. El número de ramas asociados con un nodo se llaman grados de nodo. Cada parte del árbol puede ser expresada de forma recursiva como un subárbol. El primer nodo de un árbol se llama raíz, los nodos pueden ser padres o descendientes (hijos), los nodos que no tienen hijos se llaman hojas. El nivel de un nodo es su distancia a la raíz, la raíz tiene por defecto nivel cero. Un camino es una secuencia de nodos en la que cada uno es adyacente al siguiente. La altura o la profundidad es el nivel de la hoja del camino más largo más uno. Un subárbol es una estructura jerárquica de bajo de un padre. Representación de un Árbol. Existen varias representaciones de los árboles como por ejemplo el diagrama de organización, los niveles de profundidad o la lista con paréntesis. Árboles Binarios. Un árbol binario es un árbol en el que ningún nodo puede tener más de dos subárboles. Ejemplo: Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 4 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información Árboles Binarios Completos Un árbol binario completo de profundidad n es un árbol en el que para cada nivel del cero al n-1 tiene un conjunto lleno de nodo y todos los nodos hojas a nivel n ocupan las posiciones más a las izquierdas del árbol, en otras palabras los últimos nodos tienen que estar consecutivos. Árbol Binario Lleno Es un árbol binario completo que contiene 2n nodos en el nivel n, es decir, que tiene el máximo número de entradas para su altura. Un árbol degenerado es un tipo especial de árbol en el que hay sólo una hoja y cada nodo sólo tiene un hijo, es decir, equivale una lista enlazada. Estructura de un Árbol Binario Se construye con nodos, cada nodo tiene un campo dato y dos punteros, un puntero al árbol izquierdo y un puntero al árbol derecho. Representación de los Árboles Binarios en C++ //Representación de un Nodo typedef int TipoElemento; typedef struct nodo{ TipoElemento dato; struct nodo *izdo, *dcho; }Nodo; typedef Nodo* ArbolBinario; //Creación de un Árbol Binario ArbolBinario crearNodo(TipoElemento x) { ArbolBinario a; a=(ArbolBinario) malloc(sizeof(Nodo)); a->dato=x; a->dcho=a->izdo=NULL; return a; } void nuevoArbol(ArbolBinario* raiz, ArbolBinario ramaIzqda, TipoElemento x, ArbolBinario ramaDrcha) { Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 5 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información *raiz=crearNodo(x); (*raiz)->izdo=ramaIzqda; (*raiz)->dcho=ramaDrcha; } Operaciones Básicas con Árboles Binarios 1- INSERCIÓN void insertar(Nodo** raiz, TipoElemento dato) { if(!(*raiz)) *raiz=crearNodo(dato); else if(dato<(*raiz)->dato) insertar(&((*raiz)->izdo),dato); else insertar(&((*raiz)->dcho),dato); } 2- BUSQUEDA Nodo* buscar (Nodo* raiz, TipoElemento buscado) { if(!raiz) return 0; else if(buscado==raiz->dato) return raiz; else if(buscado<raiz->dato) return buscar(raiz->izdo,buscado); else return buscar(raiz->dcho,buscado); } 3- ELIMINACIÓN void Borrar(Arbol *a, int dat) { pNodo padre = NULL; pNodo actual; pNodo nodo; int aux; actual = *a; while(!Vacio(actual)) { Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 6 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información if(dat == actual->dato) { if(EsHoja(actual)) { if(padre) if(padre->derecho == actual) padre->derecho = NULL; else if(padre->izquierdo == actual) padre->izquierdo = NULL; free(actual); actual = NULL; return; } else { /* Buscar nodo */ padre = actual; if(actual->derecho) { nodo = actual->derecho; while(nodo->izquierdo) { padre = nodo; nodo = nodo->izquierdo; } } else { nodo = actual->izquierdo; while(nodo->derecho) { padre = nodo; nodo = nodo->derecho; } } /* Intercambio */ aux = actual->dato; actual->dato = nodo->dato; nodo->dato = aux; actual = nodo; } } else { padre = actual; if(dat > actual->dato) actual = actual->derecho; else if(dat < actual->dato) actual = actual->izquierdo; } } } Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 7 Universidad Centroamericana Ingeniería en Sistemas y Tecnologías de la Información Conclusiones Los árboles son estructuras en las cuales los datos se organizan conformando un orden jerárquico, los elementos se relacionan entre sí a través de ramas. Los árboles a pesar de ser un poco complejo, son muy eficiente a la hora del manejo de los datos. Bibliografía Joyanes Aguilar, Luis, Zahonero Martínez, Ignacio (1999). Estructuras de Datos: Algoritmos, Abstracción y Objetos. Madrid: McGraw-Hill. ISBN: 84-481-2442-6 (UCA) Joyanes Aguilar, Luis (2000). Programación en C++: Algoritmos, Estructuras de Datos y Objetos. Madrid: McGraw-Hill. ISBN: 84-481-2487-1 (UCA) Joyanes Aguilar, Luis (1996). Fundamentos de Programación: Algoritmos y Estructuras de Datos, 2da. Edición. Madrid: McGraw-Hill. SBN: 84-481-0603-2 (UCA) www.lawebdelprogramador.com www.c.conclase.net www.elrincondelprogramador.com www.programacion.com Arboles en Lenguaje de Programación Abstracción y Estructura de Datos 8