SlideShare une entreprise Scribd logo
1  sur  3
Télécharger pour lire hors ligne
Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión

                  Práctica 19: Árboles                           Binarios en C++
Teoría.
Las estructuras dinámicas vistas hasta ahora son lineales (listas enlazadas, pilas, colas). Estas estructuras tienen grandes
ventajas en cuanto a flexibilidad sobre las representaciones contiguas, pero tienen un punto débil: son listas secuenciales,
es decir, están dispuestas de forma que es necesario recorrer cada posición al menos una vez (cada elemento tiene un
sucesor). Mediante los árboles binarios se introduce el concepto de estructura de bifurcación, donde cada elemento puede
tener más de un posible 'siguiente', con lo cual es posible resolver algunos problemas de difícil solución cuando se usan
estructuras dinámicas lineales.

El árbol es una estructura muy usada en todos los ámbitos de la informática ya que se adapta a la representación natural de
informaciones homogéneas organizadas y de una gran comodidad y rapidez de manipulación. Las estructuras tipo árbol se
usan para representar datos con una relación jerárquica entre sus elementos, como son árboles genealógicos, tablas, etc.

Un árbol se define como un conjunto finito de uno o más nodos relacionados de la siguiente forma:
        • Hay un nodo especial llamado raíz del árbol, que proporciona un punto de entrada a la estructura.
        • Los nodos restantes se subdividen en m>=0 conjuntos disjuntos, cada uno de los cuales es a su vez un árbol.
        Estos árboles se llaman subárboles del raíz.

Nótese que esta definición es recursiva, se define un árbol en función de otros árboles.
La representación y terminología de los árboles se realiza con las típicas notaciones de las relaciones familiares en los
árboles genealógicos: padre, hijo, hermano, ascendiente, descendiente. Junto a estos conceptos se definen otros tales como
raíz, nodo, hoja, camino, nivel, profundidad, etc., con los cuales se supone familiarizado al alumno.

                                              1


                                  2                                  3

                       4                          5              6                7                8

                                                      9
Un Árbol Binario se define como un conjunto de 0 ó más nodos tales que:
       • Existe un nodo llamado raíz del árbol.
       • Cada nodo puede tener 0,1, ó 2 subárboles conocidos como subárbol izquierdo y subárbol derecho.

Un árbol binario puede ser representado fácilmente eligiendo las estructuras de datos adecuadas. Un árbol general puede
transformarse en un árbol binario aplicando determinados algoritmos de conversión, el resto del epígrafe se centrará en el
estudio de los árboles binarios.

La representación dinámica de un árbol binario utiliza variables punteros y asignación dinámica de espacios de memoria.
Cada nodo del árbol contiene al menos los siguientes campos:
        • Campo de datos que almacena el tipo de datos.
        • Puntero al subárbol izquierdo.
        • Puntero al subárbol derecho.

Se llama recorrido de un árbol binario al proceso que permite acceder una sola vez a cada uno de los nodos del árbol.
Cuando un árbol se recorre, el conjunto completo de nodos se examina. Los algoritmos de recorrido de un árbol realizan las
siguientes tareas comunes:
         • Procesar el nodo raíz.
         • Recorrer el subárbol izquierdo.
         • Recorrer el subárbol derecho.




                                                                                      José Luis Pastrana Brincones @ 2004
                                                             1
Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión




El orden en que se realizan estas acciones da nombre a los tres algoritmos más usuales: pre-orden, in-orden y post-orden:

     void inOrden(TArbol a)                void preOrden(TArbol a)               void postOrden(TArbol a)
     { if (!arbolVacio(a))                 { if (!arbolVacio(a))                 { if (!arbolVacio(a))
       { inOrden(Izda(a));                   { procesar(a);                        { postOrden(Izda(a));
         procesar(a);                          preOrden(Izda(a));                    postOrden(Decha(a));
         inOrden(Decha(a));                    preOrden(Decha(a));                   procesar(a);
       }                                     }                                     }
     }                                     }                                     }


En cuanto a las operaciones aplicables a un árbol binario se muestran en el módulo de implementación Marbol las
siguientes:
        - crearVacio: Devuelve un árbol binario vacío.
        - crearRaiz: Crea el nodo raíz de un árbol, y almacena en este nodo el valor que se le pasa como parámetro a la
        función.
        - crearIzda: Dado un árbol binario que no tiene desarrollada su rama izquierda, esta función crea un nodo con el
        valor que se recibe como argumento, y se asigna a la rama izquierda del árbol binario original.
        - crearDcha: Es similar al procedimiento anterior pero aplicable a la rama derecha.
        - sacarRaiz: Esta función devuelve el valor de la raíz de un árbol binario.
         - arbolVacio: Determina si un árbol binario está o no vacío.
         - destruirArbol. Libera la memoria utilizada por el árbol. Hace un recorrido en postorden.

Árboles binarios de búsqueda: es un árbol binario en el que el subárbol izquierdo de cualquier nodo (si no está vacío)
contiene valores menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío) contiene valores
mayores.

Práctica

Se desea realizar un programa para llevar la c  ontabilidad de existencias de productos en un supermercado. De cada
producto, se almacenará su nombre y el número de unidades existentes de la misma. Para una mayor eficiencia, se decide
usar un árbol binario de búsqueda. El programa deberá presentar el siguiente menú:


                                         MENU SUPERMERCADO
                                         ------------------
                                         Autor: <Apellidos> <Nombre>
                                         A. Inserta producto en el supermercado.
                                         B. Busca una producto en el supermercado.
                                         C. Eliminar producto del supermercado.
                                         D. Modifica producto del supermercado.
                                         E. Listar producto supermercado.
                                         X. Salir del Programa.

                                         Introduzca Opción:

Nota. Se deberán tener los siguientes Módulos: MCadena (manejo de cadenas de caracteres), MProducto (manejo de los
productos), MABB (módulo del árbol binario de búsqueda) y programa principal..




                                                                                     José Luis Pastrana Brincones @ 2004
                                                             2
Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión
La parte de definición del Módulo de productos será la siguiente:

#ifndef _MPRODUCTO_H_
#define _MPRODUCTO_H_

#include "MCadena.h"

namespace MProducto
{
  using namespace MCadena;

    typedef unsigned int TNatural;

    struct TProducto
    {
       TCadena producto; // Clave del registro
       TNatural ctd;
    };


    TCompara ComparaProducto(TProducto p1, TProducto p2);
    TProducto LeerProducto();
    void EscribirProducto(TProducto p);
}

#endif




                                                                    José Luis Pastrana Brincones @ 2004
                                                             3

Contenu connexe

Tendances

Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosAngel Vázquez Patiño
 
Modelos de base de datos
Modelos de base de datosModelos de base de datos
Modelos de base de datosIrene Lorza
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y ColasAlex Pin
 
Tema 04- Ddatos Externos Fun Mat y Tex
Tema 04- Ddatos Externos Fun Mat y TexTema 04- Ddatos Externos Fun Mat y Tex
Tema 04- Ddatos Externos Fun Mat y Texciberayudavirtualplus2
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binariosdaniel9026
 
Listas, pilas & colas
Listas, pilas & colasListas, pilas & colas
Listas, pilas & colasjorgeluis0317
 
Conceptos basicos mysql
Conceptos basicos mysqlConceptos basicos mysql
Conceptos basicos mysqlkevin senior
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos jarydr18
 
Comandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchComandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchRobedgar MX
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colasiventura26
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaLupitaOMG Garmendia
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasElias Peña
 

Tendances (20)

Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Avl trees
Avl treesAvl trees
Avl trees
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Modelos de base de datos
Modelos de base de datosModelos de base de datos
Modelos de base de datos
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 
Tema 04- Ddatos Externos Fun Mat y Tex
Tema 04- Ddatos Externos Fun Mat y TexTema 04- Ddatos Externos Fun Mat y Tex
Tema 04- Ddatos Externos Fun Mat y Tex
 
Clase 1 Modelo Físico de Base de Datos
Clase 1 Modelo Físico de Base de DatosClase 1 Modelo Físico de Base de Datos
Clase 1 Modelo Físico de Base de Datos
 
Diapositivas de jtable java
Diapositivas de jtable javaDiapositivas de jtable java
Diapositivas de jtable java
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
 
Listas, pilas & colas
Listas, pilas & colasListas, pilas & colas
Listas, pilas & colas
 
Unidad IV SQL
Unidad IV SQLUnidad IV SQL
Unidad IV SQL
 
Conceptos basicos mysql
Conceptos basicos mysqlConceptos basicos mysql
Conceptos basicos mysql
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos
 
ARBOLES BINARIOS
ARBOLES BINARIOSARBOLES BINARIOS
ARBOLES BINARIOS
 
Comandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchComandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbench
 
Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colas
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en Java
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
 

Similaire à Arboles binarios

Estructura de dato unidad 4
Estructura de dato unidad 4Estructura de dato unidad 4
Estructura de dato unidad 4lenithoz
 
Unidad cuatro estructura de datos
Unidad cuatro estructura de datosUnidad cuatro estructura de datos
Unidad cuatro estructura de datosRené Sosa Arana
 
Presentación Árbol Binario
Presentación Árbol BinarioPresentación Árbol Binario
Presentación Árbol BinarioFernando Solis
 
Dylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdfDylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdfDylanMedina4
 
Abstracciones de datos
Abstracciones de datosAbstracciones de datos
Abstracciones de datosAriel Medina
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Eli Diaz
 
Arboles - estructura de datos
Arboles - estructura de datos Arboles - estructura de datos
Arboles - estructura de datos Kaneki04
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5pootalex
 
Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datoskata17
 
Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datoskata17
 
Sustentacion arboles
Sustentacion arbolesSustentacion arboles
Sustentacion arbolesrafyel2000
 

Similaire à Arboles binarios (20)

Estructura de dato unidad 4
Estructura de dato unidad 4Estructura de dato unidad 4
Estructura de dato unidad 4
 
Unidad cuatro estructura de datos
Unidad cuatro estructura de datosUnidad cuatro estructura de datos
Unidad cuatro estructura de datos
 
Presentación Árbol Binario
Presentación Árbol BinarioPresentación Árbol Binario
Presentación Árbol Binario
 
Dylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdfDylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdf
 
Abstracciones de datos
Abstracciones de datosAbstracciones de datos
Abstracciones de datos
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
 
2 arboles
2 arboles2 arboles
2 arboles
 
Arboles - estructura de datos
Arboles - estructura de datos Arboles - estructura de datos
Arboles - estructura de datos
 
Tema6-Arboles.pdf
Tema6-Arboles.pdfTema6-Arboles.pdf
Tema6-Arboles.pdf
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Presentación1
Presentación1Presentación1
Presentación1
 
Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5
 
Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datos
 
Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datos
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Sustentacion arboles
Sustentacion arbolesSustentacion arboles
Sustentacion arboles
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Presentación1
Presentación1Presentación1
Presentación1
 
SQL Server Fundamentals
SQL Server FundamentalsSQL Server Fundamentals
SQL Server Fundamentals
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 

Arboles binarios

  • 1. Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión Práctica 19: Árboles Binarios en C++ Teoría. Las estructuras dinámicas vistas hasta ahora son lineales (listas enlazadas, pilas, colas). Estas estructuras tienen grandes ventajas en cuanto a flexibilidad sobre las representaciones contiguas, pero tienen un punto débil: son listas secuenciales, es decir, están dispuestas de forma que es necesario recorrer cada posición al menos una vez (cada elemento tiene un sucesor). Mediante los árboles binarios se introduce el concepto de estructura de bifurcación, donde cada elemento puede tener más de un posible 'siguiente', con lo cual es posible resolver algunos problemas de difícil solución cuando se usan estructuras dinámicas lineales. El árbol es una estructura muy usada en todos los ámbitos de la informática ya que se adapta a la representación natural de informaciones homogéneas organizadas y de una gran comodidad y rapidez de manipulación. Las estructuras tipo árbol se usan para representar datos con una relación jerárquica entre sus elementos, como son árboles genealógicos, tablas, etc. Un árbol se define como un conjunto finito de uno o más nodos relacionados de la siguiente forma: • Hay un nodo especial llamado raíz del árbol, que proporciona un punto de entrada a la estructura. • Los nodos restantes se subdividen en m>=0 conjuntos disjuntos, cada uno de los cuales es a su vez un árbol. Estos árboles se llaman subárboles del raíz. Nótese que esta definición es recursiva, se define un árbol en función de otros árboles. La representación y terminología de los árboles se realiza con las típicas notaciones de las relaciones familiares en los árboles genealógicos: padre, hijo, hermano, ascendiente, descendiente. Junto a estos conceptos se definen otros tales como raíz, nodo, hoja, camino, nivel, profundidad, etc., con los cuales se supone familiarizado al alumno. 1 2 3 4 5 6 7 8 9 Un Árbol Binario se define como un conjunto de 0 ó más nodos tales que: • Existe un nodo llamado raíz del árbol. • Cada nodo puede tener 0,1, ó 2 subárboles conocidos como subárbol izquierdo y subárbol derecho. Un árbol binario puede ser representado fácilmente eligiendo las estructuras de datos adecuadas. Un árbol general puede transformarse en un árbol binario aplicando determinados algoritmos de conversión, el resto del epígrafe se centrará en el estudio de los árboles binarios. La representación dinámica de un árbol binario utiliza variables punteros y asignación dinámica de espacios de memoria. Cada nodo del árbol contiene al menos los siguientes campos: • Campo de datos que almacena el tipo de datos. • Puntero al subárbol izquierdo. • Puntero al subárbol derecho. Se llama recorrido de un árbol binario al proceso que permite acceder una sola vez a cada uno de los nodos del árbol. Cuando un árbol se recorre, el conjunto completo de nodos se examina. Los algoritmos de recorrido de un árbol realizan las siguientes tareas comunes: • Procesar el nodo raíz. • Recorrer el subárbol izquierdo. • Recorrer el subárbol derecho. José Luis Pastrana Brincones @ 2004 1
  • 2. Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión El orden en que se realizan estas acciones da nombre a los tres algoritmos más usuales: pre-orden, in-orden y post-orden: void inOrden(TArbol a) void preOrden(TArbol a) void postOrden(TArbol a) { if (!arbolVacio(a)) { if (!arbolVacio(a)) { if (!arbolVacio(a)) { inOrden(Izda(a)); { procesar(a); { postOrden(Izda(a)); procesar(a); preOrden(Izda(a)); postOrden(Decha(a)); inOrden(Decha(a)); preOrden(Decha(a)); procesar(a); } } } } } } En cuanto a las operaciones aplicables a un árbol binario se muestran en el módulo de implementación Marbol las siguientes: - crearVacio: Devuelve un árbol binario vacío. - crearRaiz: Crea el nodo raíz de un árbol, y almacena en este nodo el valor que se le pasa como parámetro a la función. - crearIzda: Dado un árbol binario que no tiene desarrollada su rama izquierda, esta función crea un nodo con el valor que se recibe como argumento, y se asigna a la rama izquierda del árbol binario original. - crearDcha: Es similar al procedimiento anterior pero aplicable a la rama derecha. - sacarRaiz: Esta función devuelve el valor de la raíz de un árbol binario. - arbolVacio: Determina si un árbol binario está o no vacío. - destruirArbol. Libera la memoria utilizada por el árbol. Hace un recorrido en postorden. Árboles binarios de búsqueda: es un árbol binario en el que el subárbol izquierdo de cualquier nodo (si no está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío) contiene valores mayores. Práctica Se desea realizar un programa para llevar la c ontabilidad de existencias de productos en un supermercado. De cada producto, se almacenará su nombre y el número de unidades existentes de la misma. Para una mayor eficiencia, se decide usar un árbol binario de búsqueda. El programa deberá presentar el siguiente menú: MENU SUPERMERCADO ------------------ Autor: <Apellidos> <Nombre> A. Inserta producto en el supermercado. B. Busca una producto en el supermercado. C. Eliminar producto del supermercado. D. Modifica producto del supermercado. E. Listar producto supermercado. X. Salir del Programa. Introduzca Opción: Nota. Se deberán tener los siguientes Módulos: MCadena (manejo de cadenas de caracteres), MProducto (manejo de los productos), MABB (módulo del árbol binario de búsqueda) y programa principal.. José Luis Pastrana Brincones @ 2004 2
  • 3. Laboratorio de Programación 1ºA E.T.S.I. Informática Gestión La parte de definición del Módulo de productos será la siguiente: #ifndef _MPRODUCTO_H_ #define _MPRODUCTO_H_ #include "MCadena.h" namespace MProducto { using namespace MCadena; typedef unsigned int TNatural; struct TProducto { TCadena producto; // Clave del registro TNatural ctd; }; TCompara ComparaProducto(TProducto p1, TProducto p2); TProducto LeerProducto(); void EscribirProducto(TProducto p); } #endif José Luis Pastrana Brincones @ 2004 3