Arbol binario (ABB)
Mayor y menor de un árbol binario
Hacer un programa que permita buscar un elemento, el elemento mayor, el elemento menor y el menor de los mayores de un árbol binario.
#include <iostream.h>
#include <conio.h>
struct nodo
{
int valor;
struct nodo* izq;
struct nodo* der;
};
typedef struct nodo *ABB;
void inserta(ABB& ,int);
void preorden(ABB);
void postorden(ABB);
void enorden(ABB);
void verarbol(ABB,int);
int buscar(ABB,int);
int buscarmayor(ABB);
int buscarmenor(ABB);
void podar(ABB&,int);
void main()
{
ABB arbol=NULL;
ABB subarbol=NULL;
int n,x,opc,a;
do
{
cout<<"menu principal"<<endl;
cout<<"1.ingresar elementos"<<endl;
cout<<"2.pre orden"<<endl;
cout<<"3.mostrar hojas"<<endl;
cout<<"4.en orden"<<endl;
cout<<"5.visualizar arbol"<<endl;
cout<<"6.buscar elementos"<<endl;
cout<<"7.buscar mayor"<<endl;
cout<<"8.buscar menor"<<endl;
cout<<"9.podar"<<endl;
cout<<"10.talar"<<endl;
cout<<"11.menor de los mayores"<<endl;
cout<<"0.salir"<<endl;
cout<<"=========================="<<endl;
cout<<"ingrese una opcion: ";cin>>opc;
switch(opc)
{
case 1:{
cout<<"ingrese cantidad de elem. al arbol: ";cin>>n;
for(int i=0;i<n;i++)
{
cout<<"ingrese numero"<<i<<" : ";cin>>x;
inserta(arbol,x);
}
getch();
break;
}//fin case1
case 2:{
if(arbol!=NULL)
{
cout<<endl<<"pre orden : ";
preorden(arbol);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case2
case 3:{
if(arbol!=NULL)
{
cout<<endl<<"las ojas son : ";
postorden(arbol);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case3
case 4:{
if(arbol!=NULL)
{
cout<<endl<<"en orden : ";
enorden(arbol);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case4
case 5:{
cout<<" visualizacion del arbol "<<endl<<endl;
if(arbol!=NULL)
{
verarbol(arbol,0);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case5
case 6:{
int elem,r;
if(arbol!=NULL)
{
cout<<"ingrese elemento a buscar: ";cin>>elem;
r=buscar(arbol,elem);
/*if(r==1)
cout<<elem<<" encontrado";
else
cout<<elem<<" NO encontrado";
*/
cout<<"elemento encontrado"<<endl;
cout<<"se recorrieron:"<<r<<"elementos";
}
else
{
cout<<" el arbol no tiene elementos";
}
getch();
break;
}//fin case6
case 7:{
if(arbol!=NULL)
{
cout<<"el mayor elemento es: "<<buscarmayor(arbol);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case7
case 8:{
if(arbol!=NULL)
{
cout<<"el menor elemento es: "<<buscarmenor(arbol);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case8
case 9:{
int corte;
if(arbol!=NULL)
{
cout<<"ingrese elemento de corte: ";cin>>corte;
if(buscar(arbol,corte))
{
if(arbol->valor==corte)
arbol=NULL;
else
podar(arbol,corte);
cout<<"el arbol fue podado con exito";
}
else
cout<<"elemento no esta en el arbol";
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case 9
case 10:{
if(arbol!=NULL)
{
arbol=NULL;
cout<<"el arbol fue talado con exito";
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}
//fin case 10
case 11:
subarbol=arbol->der;
a=buscarmenor(subarbol);
cout<<"menor de los mayores "<<a;
getch();
break;
}//fin switch
clrscr();
}while(opc!= 0);
}//fin main.
/*************************** funciones **************************/
void inserta(ABB &arbol,int x)
{
if(arbol==NULL)
{
arbol=new(struct nodo);
arbol->valor=x;
arbol->izq=NULL;
arbol->der=NULL;
}
else
{
if(x<arbol->valor) inserta(arbol->izq,x);
else
if(x>arbol->valor) inserta(arbol->der,x);
}
}
void preorden(ABB arbol)
{
if(arbol!=NULL)
{
cout<<arbol->valor<<" ";
preorden(arbol->izq);
preorden(arbol->der);
}
}
void enorden(ABB arbol)
{
if(arbol!=NULL)
{
enorden(arbol->izq);
cout<<arbol->valor<<" ";
enorden(arbol->der);
}
}
void postorden(ABB arbol)
{
if(arbol!=NULL)
{
postorden(arbol->izq);
postorden(arbol->der);
if(arbol->der==NULL && arbol->izq==NULL)
{cout<<arbol->valor<<" ";}
}
}
void verarbol(ABB arbol, int nro)
{
int i;
if(arbol==NULL)return;
verarbol(arbol->der,nro+1);
for(i=0;i<nro;i++)
cout<<" ";
cout<<arbol->valor<<endl;
verarbol(arbol->izq,nro+1);
}
int buscar(ABB arbol, int bus)
{
ABB A1;
A1=arbol;
int i=0;
while(A1!=NULL)
{
if(bus < A1->valor)
{A1=A1->izq;
i=i+1;}
else
if(bus > A1->valor)
{ A1= A1->der;
i=i+1;
}
else
return i;
}
return -1;
}
int buscarmenor(ABB arbol)
{
int menor;
while(arbol->izq!=NULL)
arbol=arbol->izq;
menor=arbol->valor;
return menor;
}
int buscarmayor(ABB arbol)
{
int mayor;
while(arbol->der!=NULL)
arbol=arbol->der;
mayor=arbol->valor;
return mayor;
}
void podar(ABB& A1,int corte)
{
while(A1!=NULL)
{
if(corte<A1->valor)
if(A1->izq->valor==corte)
{
A1->izq=NULL;
break;
}
else
A1=A1->izq;
else
if(A1->der->valor==corte)
{
A1->der=NULL;
break;
}
else
A1=A1->der;
}//fin while
}
Continuando con Arbol binario (ABB), les comparto el siguiente post: Ver menor de menores, podar, talar, elemento de izquierda y derecha
Una respuesta a «Programacion c++: mayor y menor de un árbol binario»
Hola! oye una pregunta como seria el metodo de multiplicar todos los elemento de un arbol?
es que ya hice pero solo la suma…y lo mismo hice en la multiplicacion…pero cambiando el operado…pero no me sale! me envia directamente a 0, cuando el arbol SI tiene elementos…
El codigo es asi:
int ArbolNN::MultiNodo(Nodo *nodo)
if (nodo==NULL)
return 0;
return nodo->dato * MultiNodo(nodo->izq) * MultiNodo(nodo->der);
Me podrias decir cual es el error?