#include #include #include using namespace std; template class NodoArbol { public: T info; int repeticiones; NodoArbol *izq, *der; NodoArbol() { izq = der = NULL; } NodoArbol(T dato){ info = dato; repeticiones = 0; izq = der = NULL; } }; template class ABB { private: NodoArbol *raiz; public: ABB() { raiz = NULL; } NodoArbol* getRaiz(){return raiz;} void insertarDatoRecursivamente(NodoArbol *inicial, T dato); void desplegarArbol(NodoArbol *inicial); ~ABB() { libera(raiz); } }; template void libera (NodoArbol* 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 void ABB::insertarDatoRecursivamente(NodoArbol *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 *nuevo = new NodoArbol(dato); inicial->izq = nuevo; } } else { if(inicial->der != NULL) { insertarDatoRecursivamente(inicial->der, dato); } else { NodoArbol *nuevo = new NodoArbol(dato); inicial->der = nuevo; } } } else { NodoArbol *nuevo = new NodoArbol(dato); raiz = nuevo; } } template void ABB::desplegarArbol(NodoArbol *inicial) { if(inicial!=NULL) { desplegarArbol(inicial->izq); if(inicial->repeticiones == 0) { cout<info<repeticiones; i++) cout<info<<' '; cout<der); } } int main() { ABB arbol; ifstream arch; ofstream archivoSalida; string nomarch; int dato; cout << "Ingrese el nombre del archivo a cargar: "<> 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: "<>decision; archivoSalida.open(nomarch.c_str(), ios::app); while(decision==1) { cout<<"Inserte un dato entero:"<>dato; archivoSalida<>decision; } archivoSalida.close(); cout<<"Este es el arbol modificado guardado en el archivo: "<