Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Diego_Capera en 19 Noviembre 2016, 01:06 am



Título: mostrar un arbol binario con pilas en inorden
Publicado por: Diego_Capera en 19 Noviembre 2016, 01:06 am
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);

}