Podar un árbol (ABB)
Arbol binario (ABB)
Mediante programación en C++, desarrollar un programa con un menú de 4 opciones, que permita podar árbol, luego mostrar los elementos de un árbol después de ser podado y mostrar todos los elementos del árbol ingresados por teclado.
#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 verarbol(ABB,int);
void podar(ABB&,int);
int buscar(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.visualizar arbol"<<endl;
cout<<"3.podar"<<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:{
cout<<" visualizacion del arbol "<<endl<<endl;
if(arbol!=NULL)
{
verarbol(arbol,0);
}
else
{
cout<<"el arbol no tiene elementos";
}
getch();
break;
}//fin case5
case 3:{
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
}//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 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;
}
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
}
Como se puede ver en las imágenes, el ejercicio sobre árbol (ABB), permite realizar lo siguiente:
La primera opción del menú del programa pide que se ingrese la cantidad de elementos (n) que tendrá el árbol (ABB), luego se debe ingresar cada elemento (x).
La segunda opción del menú del programa, muestra los elementos del árbol (ABB) que se ingresaron.
La tercera opción del menú de la aplicación, permite podar el árbol (ABB).
Y finalmente la opción salir, que nos permite salir de la aplicación .
Espero te haya servido de mucha ayuda este ejercicio y si te gustó este post, no dudes en compartirlo!!
Continuando con árbol binario (ABB) en C++, les comparto el siguiente post: Ver menor de menores, podar, talar, elemento de izquierda y derecha de un árbol (ABB)