Exemple #1
0
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);
                }
            }
        }
    }
}
Exemple #2
0
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;
}
Exemple #3
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;
}
Exemple #5
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;
}