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
}
podar un árbol (ABB)
podar un árbol (ABB)
podar un árbol (ABB)
podar un árbol (ABB)

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)