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);
}
#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);
}