void inordenNR(const ArbolBinario<int>& a){ ArbolBinario<int>::Nodo actual; stack<ArbolBinario<int>::Nodo> p; actual=a.raiz(); p.push(ArbolBinario<int>::nodo_nulo); p.push(actual); while (actual!=ArbolBinario<int>::nodo_nulo){ if (a.izquierda(actual)!=ArbolBinario<int>::nodo_nulo){ actual= a.izquierda(actual); p.push(actual); } else{ cout << a.etiqueta(actual) << ' '; if (a.derecha(actual)!=ArbolBinario<int>::nodo_nulo){ actual=a.derecha(actual); p.pop(); p.push(actual); } else{ p.pop(); actual=p.top(); // Nos vamos al hermano (excepto si se trataba de la raíz) if (actual != ArbolBinario<int>::nodo_nulo) { cout << a.etiqueta(actual) << ' '; p.pop(); actual = a.derecha(actual); p.push(actual); } } } } }
int main() { ArbolBinario<TraitMayor<int> > a; a.insertar(5); a.insertar(3); a.insertar(2); a.insertar(7); a.insertar(8); a.insertar(1); return 0; }
//arbol de exprecion modifique el contructor de nodos agregando un tipo char el cual tomara el carcater double evaluar(ArbolBinario a, double operandos[]){ double x, y; char ch ; Nodo *raiz; raiz = a.Oraiz(); if (raiz != NULL){ ch = raiz->operador; if (ch >= 'A' && ch <= 'Z') return operandos[ch - 'A']; else{ x = evaluar(raiz->izdo, operandos); y = evaluar(raiz->dcho, operandos); switch (ch) { case '+': return x + y; break; case '-': return x - y; break; case '*': return x * y; break; case '/': if (y != 0) return x/y; else throw "Error: división por 0"; break; case '^': return pow(x, y); } } } }
int _tmain(int argc, _TCHAR* argv[]) { srand(time(NULL)); ArbolBinario a; for (int i = 0; i < 10; ++i) { a.insertarElemento(new ElementoInt(rand() % 100)); } ArbolBinario b; for (int i = 0; i < 10; ++i) { b.insertarElemento(new ElementoDouble((rand() % 100) + 1.1)); } ArbolBinario c; Persona p1(5, "Pedro"); Persona p2(2, "Andres"); Persona p3(4, "Carmen"); Persona p4(1, "Jose"); Persona p5(3, "Maria"); Persona p6(7, "Adriana"); Persona p7(6, "Laura"); c.insertarElemento(new ElementoPersona(p1)); c.insertarElemento(new ElementoPersona(p2)); c.insertarElemento(new ElementoPersona(p3)); c.insertarElemento(new ElementoPersona(p4)); c.insertarElemento(new ElementoPersona(p5)); c.insertarElemento(new ElementoPersona(p6)); c.insertarElemento(new ElementoPersona(p7)); cout << "*** Inicia el arbol de ElementoInt" << endl; cout << a << endl; cout << "*** Finaliza el arbol de ElementoInt" << endl; cout << endl; cout << "*** Inicia el arbol de ElementoDouble" << endl; cout << b << endl; cout << "*** Finaliza el arbol de ElementoDouble" << endl; cout << "*** Inicia el arbol de ElementoPersona" << endl; cout << c << endl; cout << "*** Finaliza el arbol de ElementoPersona" << endl; system("PAUSE"); return 0; }
int _tmain(int argc, _TCHAR* argv[]) { srand(time(NULL)); cout << "Arbol de integers" << endl; ArbolBinario a; for (int i = 0; i < 10; ++i) { a.insertarElemento(new ElementoInt(rand() % 100)); } cout << a << endl; cout << "Arbol de doubles" << endl; ArbolBinario d; for (int i = 0; i < 100; ++i) { d.insertarElemento(new ElementoDouble(((double)rand()*(100.00 - 0.00)) / (double)RAND_MAX)); } cout << d << endl; cout << "Arbol de Personas" << endl; ArbolBinario q; //Array para guardar nombres del txt y seleccionarlos aleatoriamente string names[100]; int k = 0; ifstream myFile("nombres.txt"); while (!myFile.eof()){ getline(myFile, names[k]); k++; } //Array para crear id no repetidos para cada Persona int id[100]; int c = 0; while (c < 100){ unsigned int number = rand() % (110889 - 10000) + 10000; if (findRepeat(id, number) != true){ id[c] = number; c++; } } Persona * p[100]; for (int i = 0; i < 100; i++){ p[i] = new Persona(names[rand() % 100], id[i]); } for (int i = 0; i < 100; ++i) { q.insertarElemento(new ElementoPersona(p[i])); } cout << q << endl; system("pause"); return 0; }
ArbolBinario<T> * arbolSumas(ArbolBinario<T>* original){ ArbolBinario<T>* nuevo = new ArbolBinario<T>(original->suma()); arbolSumas(original, nuevo->getRaiz(), original->getRaiz()); return nuevo; }
int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned int)time(NULL)); ArbolBinario<int> a; for (int i = 0; i < 10; ++i) { a.insertar(rand() % 100); } cout << a << endl; ArbolBinario<double> b; for (int i = 0; i < 10; ++i) { b.insertar((double)(rand() % 100) / 5.0); } // cout << b << endl; ArbolBinario<Persona> c; Persona p1("Arbol", "1"); Persona p2("Hoja", "2"); Persona p3("Zeta", "3"); c.insertar(p2); c.insertar(p1); c.insertar(p3); // cout << c << endl; cout << "Preincremento" << endl; // Probar Iteradores preincremento Iterador<int> itA = a.begin(); while (itA != a.end()) { cout << *itA << endl; ++itA; } cout << endl; cout << "Posincremento" << endl; // Probar Iteradores posincremento Iterador<int> itB = a.begin(); while (itB != a.end()) { cout << *(itB++) << endl; } cout << endl; system("pause"); return 0; }