betoesquivel icon

Más tarea para el jueves de estructura

betoesquivel | PRO | 10/17/13 04:23:09 AM UTC | 0 ⭐ | 290 👁️ | Never ⏰ | []
C++ |

2.85 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
template <class T>
class NodoArbol
{ public:
    T info;
    int repeticiones;
    NodoArbol<T> *izq, *der;
    NodoArbol() { izq = der = NULL; }
    NodoArbol(T dato){ info = dato; repeticiones = 0; izq = der = NULL; }
};
 
template <class T>
class ABB
{
private:
        NodoArbol<T> *raiz;
public:
        ABB() { raiz = NULL; }
        NodoArbol<T>* getRaiz(){return raiz;}
        void insertarDatoRecursivamente(NodoArbol<T> *inicial, T dato);
        void desplegarArbol(NodoArbol<T> *inicial);
        ~ABB() { libera(raiz); }
};
 
template <class T>
void libera (NodoArbol<T>* raiz) 
{ //Observar que al ser recursive, es una función libre llamada por el método
    if (raiz != NULL)
    {   libera(raiz->izq);
        libera(raiz->der);
        delete(raiz);
    }
}
 
template <class T>
void ABB<T>::insertarDatoRecursivamente(NodoArbol<T> *inicial, T dato)
{
    if(inicial!=NULL)
    {
        if(inicial->info == dato)
        {
            inicial->repeticiones += 1;
 
        }
        else if(dato < inicial->info)
        {
            if(inicial->izq != NULL)
            {
                insertarDatoRecursivamente(inicial->izq, dato);
            }
            else
            {
                NodoArbol<T> *nuevo = new NodoArbol<T>(dato);
                inicial->izq = nuevo;
            }
 
        }
        else
        {
            if(inicial->der != NULL)
            {
                insertarDatoRecursivamente(inicial->der, dato);
            }
            else
            {
                NodoArbol<T> *nuevo = new NodoArbol<T>(dato);
                inicial->der = nuevo;
            }
        }
    }
    else
    {
        NodoArbol<T> *nuevo = new NodoArbol<T>(dato);
        raiz = nuevo;
    }
}
 
template <class T>
void ABB<T>::desplegarArbol(NodoArbol<T> *inicial)
{
 
    if(inicial!=NULL)
    {
        desplegarArbol(inicial->izq);
        if(inicial->repeticiones == 0)
        {
            cout<<inicial->info<<endl;
        }
        else
        {
            for(int i = 0; i<inicial->repeticiones; i++) 
                cout<<inicial->info<<' ';
            cout<<endl;
        }
        desplegarArbol(inicial->der);
    }
}
int main()
{
    ABB<int> arbol;
    ifstream arch;
    ofstream archivoSalida;
    string nomarch;
    int dato;
    cout << "Ingrese el nombre del archivo a cargar: "<<endl;
    cin >> nomarch;
 
    arch.open(nomarch.c_str());
    while (!arch.eof())
    {
        arch >> dato;
        arbol.insertarDatoRecursivamente(arbol.getRaiz(), dato);
    }
    arch.close();
 
    cout<<"Este es el arbol guardado en el archivo: "<<endl;
    arbol.desplegarArbol(arbol.getRaiz());
 
    int decision; 
    cout<<"\nDesea insertar mas datos al arbol? \n1)Si \n2) No"<<endl;
    cin>>decision;
    archivoSalida.open(nomarch.c_str(), ios::app);
    while(decision==1)
    {
        cout<<"Inserte un dato entero:"<<endl;
        cin>>dato;
 
        archivoSalida<<dato<<endl;
        arbol.insertarDatoRecursivamente(arbol.getRaiz(), dato);
 
        cout<<"\nDesea insertar mas datos al arbol? \n1)Si \n2)No"<<endl;
        cin>>decision;
    }
    archivoSalida.close();
 
    cout<<"Este es el arbol modificado guardado en el archivo: "<<endl;
    arbol.desplegarArbol(arbol.getRaiz());
}

Comments