Ir al contenido principal

Programación en c++: arbol (ABB) - elemento derecho, buscar mayor y menor, podar





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

arbol binario

arbol binario

arbol binario

arbol binario

arbol binario

arbol binario

arbol binario

Comentarios

Entradas más populares de este blog

Mostrar y Modificar una tabla en Netbeans

Continuando con el ejercicio anterior, ahora veremos como modificar una tabla creada en SLQ Server  desde Netbeans. Para ello sólo adicionaremos algunos códigos, en este caso siguiendo con el ejercicio anterior sólo agregamos en el index.jsp lo siguiente: <td align="center"><a href ="frmProductos.jsp?txtpara=M&txtid = <%= objpro.getcodigo() %>"><img src="images/upd.gif"></a></td> En el java class Productos, aparte de crear el método mostrar, crearemos dos métodos más: Método para Buscar y para Modificar, pero primero antes de todo declaramos nuestras variables como privado, creamos un constructor y luego aplicamos un Getter and Setter como se muestra en las siguientes imágenes:   Después de haber hecho el paso anterior, creamos un nuevo jsp la cual llamaremos frmProductos y escribimos la siguiente codificación: Luego creamos otro package que llamaremos Servlet, dentr...

Programación en c++ : Arreglos - Ordenar elementos y eliminar repetidos

1.- Hacer un programa usando arreglos, que nos permita ingresar n cantidad de elementos, luego nos deberá mostrar una lista ordenada de los elementos. Si en la lista se repiten algunos números, hacer que nos muestre una nueva lista sin los números repetidos.  #include<iostream.h> #include<conio.h> #define MAX 50 void leer(int,int[]); void ordenar(int, int[]); void listaordenar(int,int[]); void main() {int n, x[MAX],j,k,i;  cout<<"Ingresar limite:";  cin>>n;  leer(n,x);  ordenar(n,x);  cout<<"La lista ordenada es:"<<endl;  listaordenar(n,x);  cout<<"Presione cualquier tecla para eliminar...."<<endl;  getch();  for(i=0;i<n;i++)   for(j=i+1;j<n;j++)    if(x[i]==x[j])    {for(k=j;k<n-1;k++)     x[k]=x[k+1];     n=n-1;     j=i;    }  cout<<endl<<"La nueva li...

Programación en c++ : Matriz - Calcular mayor de la matriz

1.- Hacer un programa que permita ingresar n datos de una matriz y calcular el mayor de la matriz. #include<iostream.h> #include<conio.h> #define lim 50 void main() {int i,j,a[lim][lim],fila,col,  may=a[0][0];  clrscr(); do {cout<<"Ingresar limite de la fila:";  cin>>fila; }while(fila<=0); do {cout<<"Ingesar limite de la columna:";  cin>>col; }while(col<=0); gotoxy(10,7); cout<<"Ingresar Elementos de la matriz\n\n"; for(i=0;i<fila;i++) for(j=0;j<col;j++) {cout<<"a["<<i<<"]"<<"["<<j<<"]";  cin>>a[i][j]; } for(i=0;i<fila;i++) for(j=0;j<col;j++) if(a[i][j]>may) may=a[i][j]; clrscr(); gotoxy(10,7); cout<<"Elementos de la matriz\n\n"; for(i=0;i<fila;i++) for(j=0;j<col;j++) {cout<<a[i][j];  cout<<"\n"; } clrscr(); gotoxy(10,20); cout...