Programacion c++ – podar y elemento derecho, buscar mayor y menor


  Arbol (ABB)

  c++ – podar y elemento derecho

#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);
void elem_d_i(ABB);
void elem_d_d(ABB);
int buscar(ABB,int);
int buscarmayor(ABB);
int buscarmenor(ABB);
int subarbol(ABB);
void podar(ABB&,int);
void verelem_D_I();
void main()
{
ABB arbol=NULL;
int n,x,opc;
  do
    {
     cout<<"menu principal"<<endl;
     cout<<"1.ingresar elementos"<<endl;
     cout<<"2.pre orden"<<endl;
     cout<<"3.post orden"<<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.ver elem izquierda"<<endl;
     cout<<"12.ver elem derecha"<<endl;
     cout<<"13.ver el menor de 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<<"post orden : ";
      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";
     }
   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:{
        elem_d_i(arbol);
       getch();
       break;
      }
      case 12:{
        elem_d_d(arbol);
       getch();
       break;
      }
      case 13:{
       if(arbol!=NULL)
     {
      cout<<"el menor elemento de los mayores sera: "<<subarbol(arbol);
     }
   else
     {
     cout<<"el arbol no tiene elementos";
     }
   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<<" "<<endl;
    enorden(arbol->der);
   }
   
}
void postorden(ABB arbol)
{
 if(arbol!=NULL)
   {
    postorden(arbol->izq);
    postorden(arbol->der);
    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;
 while(A1!=NULL)
      {
       if(bus < A1->valor)
        {
      A1=A1->izq;
        cout<<A1->valor;
        }
       else
        if(bus > A1->valor)
           {
          A1= A1->der;
           cout<<A1->valor;
           }
        else
         return 1;
       }
 return -1;
}
int buscarmenor(ABB arbol)
{ABB anterior;
 int menor,segmenor;
 while(arbol->izq!=NULL)
  {  anterior=arbol;
      arbol=arbol->izq;
      }
      segmenor=anterior->valor;
      cout<<"El segundo menor sera:"<<segmenor<<endl;
      menor=arbol->valor;
 return menor;
}
int buscarmayor(ABB arbol)
{ ABB anterior;
 int mayor,segmayor;
 while(arbol->der!=NULL)
 {anterior=arbol;
 arbol=arbol->der;
  }
  segmayor=anterior->valor;
  cout<<"El segundo mayor sera:"<<segmayor<<endl;
 mayor=arbol->valor;
 return mayor;
}
void elem_d_i(ABB arbol)
{
 int contd=0;
 int conti=0;
if(arbol!=NULL)
  {
          while(arbol->izq!=NULL)
            {
          arbol=arbol->izq;
           conti=conti+1;
            }

   }
cout<<"TOTAL DE ELEMETOS A LA IZQUIERDA"<<conti;
 }
 void elem_d_d(ABB arbol)
{
 int contd=0;
 int conti=0;
if(arbol!=NULL)
  {
          while(arbol->der!=NULL)
            {
          arbol=arbol->der;
           contd=contd+1;
            }

   }
cout<<"TOTAL DE ELEMETOS A LA DERECHA"<<contd;
 }
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
}

int subarbol(ABB arbol)
{
ABB q;
int menor;
 while(arbol->der!=NULL)
 {
      q=arbol;
       if(q->izq!=NULL)
        q=arbol->izq;
      }
      menor=q->valor;
 return menor;
}

  Continuando con Arbol binario (ABB), les comparto el siguiente post: Pre orden, mostrar hojas, ver arbol, buscar elemento