#include <iostream>
using namespace std;
class NodoArbol
{
public:
int dato;
NodoArbol *izquierdo;
NodoArbol *derecho;
};
class Arbol{
public:
Arbol()
{
inicializarArbol();
}
void mostarorden()
{
InOrden(raiz);
}
//al nodo enviado en hijo agregarle como hijo el valor enviado en valorNodo
void agregarNodoHijo(NodoArbol *hijo, int valorNodo)
{
//si tiene que ir en el hijo izquierdo
if(hijo->dato > valorNodo)
{
if(hijo->izquierdo==NULL)
{
hijo->izquierdo= new NodoArbol;
hijo->izquierdo->dato=valorNodo;
hijo->izquierdo->izquierdo=NULL;
hijo->izquierdo->derecho=NULL;
}
else
{
agregarNodoHijo(hijo->izquierdo, valorNodo);
}
}
//si tiene que ir en el hijo derecho
if (hijo->dato <=valorNodo)
{
if(hijo->derecho==NULL)
{
hijo->derecho = new NodoArbol;
hijo->derecho->dato=valorNodo;
hijo->derecho->izquierdo=NULL;
hijo->derecho->derecho=NULL;
}
else
{
agregarNodoHijo(hijo->derecho, valorNodo);
}
}
}
void agregarNodo(int valorNodo)
{
if (raiz==NULL)
{
raiz = new NodoArbol;
raiz->dato=valorNodo;
raiz->izquierdo=NULL;
raiz->derecho=NULL;
}
else
{
agregarNodoHijo(raiz,valorNodo);
}
}
//Lectura de Arbol
private:
NodoArbol *raiz;
NodoArbol *auxiliar;
void inicializarArbol();
void InOrden(NodoArbol *hijo);
};
void Arbol::inicializarArbol()
{
raiz=NULL;
auxiliar=NULL;
}
void Arbol::InOrden(NodoArbol *hijo)
{
if (hijo!=NULL)
{
InOrden(hijo->izquierdo);
cout << hijo->dato << "\n";
InOrden(hijo->derecho);
}
}
int main()
{
Arbol *miarbol = new Arbol();
int datoLeido=0;
cout << "Ingrese un numero (0 para salir)\n";
cin >> datoLeido;
while(datoLeido != 0)
{
miarbol->agregarNodo(datoLeido);
cin >> datoLeido;
}
cout << "\n in orden:\n";
miarbol->mostarorden();
delete miarbol;
cin.get();cin.get();
return 0;
}
Esta entrada fue publicada en
Uncategorized. Guarda el
enlace permanente.