mostrar un arbol binario con pilas en inorden

Iniciado por Diego_Capera, 19 Noviembre 2016, 01:06 AM

0 Miembros y 1 Visitante están viendo este tema.

Diego_Capera

Hola me podrían hacer el favor de explicarme como mostrar un árbol binario mediante el uso de pilas en inorden, de forma recursiva ya lo se mostrar pero mediante pilas no, gracias.

#include <iostream>
using namespace std;
class Arbol{
   int dato;
   Arbol *izq;
   Arbol *der;
public:
   void crearRaiz(Arbol *&,int);
   void insIzq(Arbol *&,int);
   void insDer(Arbol *&,int);   
   void crearArbol(Arbol *&);
   void inordenR(Arbol *);
   void mostrar(Arbol *);
};

void Arbol::crearRaiz(Arbol *&raiz,int d){
   raiz=new Arbol;
   raiz->dato=d;
   raiz->izq=raiz->der=NULL;
}

void Arbol::insIzq(Arbol *&aux,int d){
   Arbol *nuevo=new Arbol;
   nuevo->dato=d;
   nuevo->izq=nuevo->der=NULL;
   aux->izq=nuevo;   
}

void Arbol::insDer(Arbol *&aux,int d){
   Arbol *nuevo=new Arbol;
   nuevo->dato=d;
   nuevo->izq=nuevo->der=NULL;
   aux->der=nuevo;   
}

void Arbol::crearArbol(Arbol *&raiz){
   int d=66;
   Arbol *aux1,*aux2;
   while(d>0){
             cout<<"Dato= "<<endl;
             cin>>d;
             if(d>0){
                      if(!raiz)
                      crearRaiz(raiz,d);
                      else{
                            aux1=aux2=raiz;
                            while(aux2&&aux1->dato!=d){
                                                         aux1=aux2;
                                                         if(d<aux1->dato)
                                                         aux2=aux2->izq;
                                                         else
                                                         aux2=aux2->der;
                                             }
                           if(d==aux1->dato)
                           cout<<"Dato repetido"<<endl;
                           else{
                              if(d<aux1->dato)
                              insIzq(aux1,d);
                              else
                              insDer(aux1,d);
                     }
                    }
                   }            
   }   
}
void Arbol::inordenR(Arbol *aux){
   if(aux){   
   inordenR(aux->izq);
   cout<<aux->dato<<endl;
   inordenR(aux->der);}
}

int main(){
   Arbol *raiz=NULL,obj1;
   obj1.crearArbol(raiz);
   obj1.inordenR(raiz);

}