elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [ESTRUCTURA DE DATOS] Árbol binario [C++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [ESTRUCTURA DE DATOS] Árbol binario [C++]  (Leído 2,005 veces)
2Fac3R


Desconectado Desconectado

Mensajes: 300


Why be a king when you can be a god


Ver Perfil WWW
[ESTRUCTURA DE DATOS] Árbol binario [C++]
« en: 29 Julio 2015, 20:48 pm »

Buenas!.

Otro tema muy importante en la estructura de datos son el manejo de árboles binarios, les comparto un ejemplo que hice para la escuela del tema, está hecho para un sistema de vuelos, por lo tanto uso la clase Pasajeros , pero ustedes pueden usar el tipo de dato que quieran almacenar en el árbol.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #include "Pasajero.h"
  6.  
  7. #ifndef __arbolbinario_H_INCLUDED__
  8. #define __arbolbinario_H_INCLUDED__
  9.  
  10.  
  11. class Nodo
  12. {
  13. private:
  14.    Pasajero *dato;
  15.    Nodo *izq; //enlace izquierdo
  16.    Nodo *der; //enlace derecho
  17.  
  18. public:
  19.    Nodo(Pasajero *info); // CONSTRUCTOR
  20.    ~Nodo(); // DESTRUCTOR
  21.  
  22.    // METODOS GET
  23.    Pasajero *getPasajero() { return dato;}
  24.    Nodo *getIzq() { return izq;}
  25.    Nodo *getDer() { return der;}
  26.  
  27.    // METODOS SET
  28.    void setIzq(Nodo *i) { izq = i;}
  29.    void setDer(Nodo *d) { der = d;}
  30.  
  31. };
  32.  
  33. Nodo::Nodo(Pasajero *info)
  34. {
  35.    dato = info;
  36.    izq = NULL;
  37.    der = NULL;
  38. }
  39.  
  40. Nodo::~Nodo()
  41. { }
  42.  
  43. class ArbolBinario
  44. {
  45.    private:
  46.        Nodo *raiz;
  47.        Nodo *Insertar(Nodo*,Pasajero*);
  48.        Nodo *Borrar(Nodo*, Pasajero*);
  49.        void preOrden(Nodo*);
  50.        void inOrden(Nodo*);
  51.        void postOrden(Nodo*);
  52.    public:
  53.        ArbolBinario();
  54.        Nodo *getRaiz() { return raiz;} // testing method
  55.        void Crear(Pasajero*);
  56.        void Recorridos(int);
  57.        void Eliminar(int);
  58.        Pasajero *Buscar(string, Nodo*);
  59.  
  60.        ~ArbolBinario();
  61. };
  62.  
  63. ArbolBinario::ArbolBinario(){
  64.    raiz = NULL;
  65. }
  66.  
  67. Nodo* ArbolBinario::Insertar(Nodo *p, Pasajero *q){
  68.    if(p == NULL){
  69.        p = new Nodo(q);
  70.    }
  71.    else{
  72.        string a = p -> getPasajero()-> getApellido(); // Primera letra del apellido que esta en la raiz
  73.  
  74.        if(q->getApellido()[0] <= a[0])
  75.        {
  76.            p->setIzq( Insertar(p->getIzq(),q) );
  77.  
  78.        }
  79.        else{
  80.            p->setDer( Insertar(p->getDer(),q) );
  81.        }
  82.    }
  83.  
  84.    return p;
  85. }
  86.  
  87. void ArbolBinario::Crear(Pasajero *q)
  88. {
  89.     raiz = Insertar(raiz,q);
  90. }
  91.  
  92. void ArbolBinario::preOrden(Nodo *p){
  93.    if(p != NULL){
  94.        cout << "\n " << p->getPasajero()->getApellido();
  95.        preOrden(p->getIzq());
  96.        preOrden(p->getDer());
  97.    }
  98. }
  99.  
  100. void ArbolBinario::inOrden(Nodo *p){
  101.    if(p != NULL){
  102.        inOrden(p->getIzq());
  103.        cout << "\n " << p->getPasajero()->getApellido();
  104.        inOrden(p->getDer());
  105.    }
  106. }
  107.  
  108. void ArbolBinario::postOrden(Nodo *p){
  109.    if(p != NULL){
  110.        cout << " \n " << p->getPasajero()->getApellido();
  111.        postOrden(p->getIzq());
  112.        postOrden(p->getDer());
  113.    }
  114. }
  115.  
  116. void ArbolBinario::Recorridos(int tipo){
  117.    switch(tipo){
  118.        case 1:
  119.            preOrden(raiz);
  120.        break;
  121.  
  122.        case 2:
  123.            inOrden(raiz);
  124.        break;
  125.  
  126.        case 3:
  127.            postOrden(raiz);
  128.        break;
  129.  
  130.        default:
  131.            cout << " - Error! opcion invalida!. -" << endl;
  132.  break;
  133.    }
  134. }
  135.  

Espero que les sea de utilidad!.

Para más información véase -> Árbol binario de búsqueda

Zalu2!


En línea

Escuela de Hackers & Programación. http://ihackndev.blogspot.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructura arbol
PHP
chicuela66 3 2,407 Último mensaje 9 Febrero 2008, 20:11 pm
por dimitrix
Altura de arbol binario
Java
l337* 4 36,766 Último mensaje 5 Diciembre 2009, 13:08 pm
por imnohacker
Arbol binario Ejemplo
.NET (C#, VB.NET, ASP)
S1dD3xt35 0 7,627 Último mensaje 21 Abril 2010, 07:18 am
por S1dD3xt35
arbol binario
Programación C/C++
karmi 2 4,444 Último mensaje 14 Diciembre 2010, 22:08 pm
por ANTÓN RAMIREZ
Arbol B Estructura de datos Btree c++
Programación C/C++
RGCJ 0 3,211 Último mensaje 8 Diciembre 2013, 15:26 pm
por RGCJ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines