#1

  1.  #include<conio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<stdio.h>
    #include<graphics.h>

     struct nodo_arbol
           {
        int dato;
           struct nodo_arbol *izq;
           struct nodo_arbol *der;
           };

    typedef struct nodo_arbol *nodo;

    void Insertar(nodo&,int);
    void Eliminar(nodo&,int);
    void Pre_Orden(nodo);                            
    void In_Orden(nodo);
    void Post_Orden(nodo);
    void Dibujar(nodo,int,int,int,int);
    int  CantidadNodos(nodo);
    int  Altura(nodo);
    int  CantidadHoja(nodo);
    int AlturaNodo(nodo,int);
    void LongitudHoja(nodo,int,int);
    void HijoPadre(nodo,int);                        
    int Buscar(nodo,int);

    void Ejecuta(int);
    void Resalta(int);
    void Marco(int,int,int,int);
    void Marco_temp(int,int,int,int);
    char *Titulos[]={"Inicializar",
             "Insertar",
             "Pre-Orden",
             "In-Orden",
             "Post-Orden",
             "Eliminar",
             "Graficar",
             "Altura",
             "Nivel",
             "Cantidad[Nodos]",
             ".Cantidad[Hojas]",
             "..Hijo Padre",
             "Salir"};
    nodo raiz;

    void main()
    {
      char Opc;
      int Y=1,f;
      textmode(C80);
      do
       {
        textcolor(1);
        textbackground(2);
         clrscr();
         gotoxy(5,7);printf(" ");gotoxy(5,17);printf(" ");
          gotoxy(5,9);printf("Û");  gotoxy(5,10);printf("Û");
         gotoxy(5,11);printf("Û"); gotoxy(5,12);printf("Û");
         gotoxy(5,13);printf("Û"); gotoxy(5,14);printf("Û");
         gotoxy(5,15);printf("Û"); gotoxy(5,16);printf("Û");
         Marco_temp(4,6,6,18);gotoxy(5,8);printf("Û");

        Marco(30,79,1,25); gotoxy(6,3);cprintf("ARBOL BINARIO ");
        Marco(4,20,2,4); Marco_temp(4,20,20,22);Marco(5,19,21,23);
        gotoxy(6,22);printf(" X455555X "); Marco(2,29,1,25);
        for(f=0;f<13;f++)
         {
          gotoxy(8,6+f);printf("%s",Titulos[f]);
         }
         Resalta(Y);
         Opc=getch();
        switch(Opc)
          {
           case 72:if(Y==1) Y=13;else Y--;break;
           case 80:if(Y==13) Y=1;else Y++;break;
           case 13:Ejecuta(Y);
          }
       }while(1);
    }


    void Ejecuta(int opc)
    { int a,gdriver=DETECT,gmode;
      switch(opc)
       {
          case 1:raiz=NULL;gotoxy(32,3);
             printf("­ Ya Se Inicializ¢ !");getch();break;
          case 2:gotoxy(32,3);printf("Ingrese Elemento a Insertar:_");
             scanf("%d",&a);Insertar(raiz,a);getch();break;
          case 3:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            Pre_Orden(raiz);getch();break;
          case 4:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            In_Orden(raiz);getch();break;
          case 5:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            Post_Orden(raiz);getch();break;
          case 6:gotoxy(32,3);printf("Ingrese el Numero:_");scanf("%d",&a);
            Eliminar(raiz,a);break;
          case 7:clrscr();initgraph(&gdriver,&gmode,"C:\\BC5\\BGI");
             Dibujar(raiz,15,3,7,0);getch();cleardevice;closegraph();break;
          case 8:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
              {gotoxy(32,3);printf("Altura del Arbol es:_%d",Altura(raiz));}
               getch(); break;
          case 9:int elem;gotoxy(32,3);printf("De que Numero Desea:_");scanf("%d",&elem);
            if(raiz==NULL){gotoxy(32,5);printf("­ Arbol Vacio !");}
            else if(AlturaNodo(raiz,elem)<1000){gotoxy(32,5);printf("  [%dø] Nivel",AlturaNodo(raiz,elem)+1);}
            else{gotoxy(35,5);printf("­ No Existe !");}getch();break;
          case 10:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
              {gotoxy(32,3);printf("El Arbol tiene [(%d)] Nodos",CantidadNodos(raiz)+1);}
               getch();break;
          case 11:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
             {gotoxy(32,3);printf("El Arbol tiene [(%d)] Hojas",CantidadHoja(raiz));}
              getch();break;
          case 12:int num;gotoxy(32,3);printf("Ingrese Numero :_");scanf("%d",&num);
            if(num==raiz->dato){gotoxy(32,5);printf("Es la Raiz");}
            if(Buscar(raiz,num)==0){gotoxy(32,5);printf("No Tiene Padre");}
            else HijoPadre(raiz,num);getch();break;
          case 13:Marco(44,63,9,11); Marco_temp(43,64,8,12);
            gotoxy(51,14);printf("­ F I N !");
            gotoxy(44,6);printf("Programa Hecho por:");
            gotoxy(45,10);printf("");getch();exit(0);break;
      }

    }
    void Resalta(int Y)
    {
      textcolor(RED);
      textbackground(7);
      gotoxy(8,5+Y); cprintf("%s",Titulos[Y-1]);
      textcolor(BLUE);
      textbackground(BLACK);
    }
    void Marco(int x1,int x2,int y1,int y2)
    {
        int i,j;
        for (i=x1;i<x2;i++)
        {
            gotoxy(i,y1); printf("Í");
            gotoxy(i,y2); printf("Í");
        }
        for (j=y1;j<y2;j++)
        {
            gotoxy(x1,j); printf("º");
            gotoxy(x2,j); printf("º");
        }
        gotoxy(x1,y1); printf("É");
        gotoxy(x2,y1); printf("»");
        gotoxy(x1,y2); printf("È");
        gotoxy(x2,y2); printf("¼");
    }

    void Marco_temp(int x1,int x2,int y1,int y2)
    {
        int i,j;
        for (i=x1;i<x2;i++)
        {
            gotoxy(i,y1); printf("±");
            gotoxy(i,y2); printf("±");
        }
        for (j=y1;j<y2;j++)
        {
            gotoxy(x1,j); printf("±");
            gotoxy(x2,j); printf("±");
        }
        gotoxy(x1,y1); printf("±");
        gotoxy(x2,y1); printf("±");
        gotoxy(x1,y2); printf("±");
        gotoxy(x2,y2); printf("±");
    }



    void Insertar(nodo &Arbol,int elem)
    {
      if(Arbol==NULL)
      {
         Arbol=(nodo)malloc(sizeof(struct nodo_arbol));
        if(Arbol==NULL)
          {
        printf("No hay Memoria");
        return;
           }
         (Arbol)->dato=elem;
         (Arbol)->izq=NULL;
         (Arbol)->der=NULL;
         gotoxy(35,5); printf("­ Ya se Insert¢ !");
        }

     else if(elem<Arbol->dato)
           Insertar(Arbol->izq,elem);
     else if(elem>Arbol->dato)
           Insertar(Arbol->der,elem);
     else{ gotoxy(35,5);
          printf("­ Error !");}
    }

    void Eliminar(nodo &Arbol,int num)
    { nodo p1,p2;
     if(Arbol==NULL){gotoxy(35,5);printf("­ No se Encuentra !");getch();return;}
     if(num<Arbol->dato)
        Eliminar(Arbol->izq,num);
     if(num>Arbol->dato)
        Eliminar(Arbol->der,num);
     else if(Arbol->izq==Arbol->der)
           {
        free(Arbol);
        Arbol=NULL;
           }
     else if(Arbol->izq==NULL)
           { p1=Arbol;
        Arbol=Arbol->der;
        free(p1);
           }
     else if(Arbol->der==NULL)
           { p1=Arbol;
        Arbol=Arbol->izq;
        free(p1);
           }
     else {
          p1=Arbol->der;
          p2=Arbol->der;
         while(p2->izq)
           p2=p2->izq;

        p2->izq=Arbol->izq;
        free(Arbol);
        Arbol=p1;
        }
    }


    void Pre_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
        {
         printf("%d,",Arbol->dato);
         Pre_Orden(Arbol->izq);
         Pre_Orden(Arbol->der);
        }
    }

    void In_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
       {
         In_Orden(Arbol->izq);
         printf("%d,",Arbol->dato);
         In_Orden(Arbol->der);
       }
    }

    void Post_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
       {
         Post_Orden(Arbol->izq);
         Post_Orden(Arbol->der);
         printf("%d,",Arbol->dato);
       }
    }

    int CantidadNodos(nodo Arbol)
    {  int x=0;
     if(Arbol->izq!=NULL)
      {
       x=CantidadNodos(Arbol->izq)+x+1;
      }
     if(Arbol->der!=NULL)
      {
       x=CantidadNodos(Arbol->der)+x+1;
      }
     return x;
    }

    int Altura(nodo Arbol)
    {  int x=0,y=0;
     if(Arbol->izq!=NULL)
      {
       x=Altura(Arbol->izq)+x+1;
      }
     if(Arbol->der!=NULL)
      {
       y=Altura(Arbol->der)+y+1;
      }
     if(x>y)
       return x;
     else
       return y;
    }

    int CantidadHoja(nodo Arbol)
    { int x=0;
     if(Arbol->izq!=NULL)
      {
       x=x+CantidadHoja(Arbol->izq);
      }
     if(Arbol->der!=NULL)
      {
       x=x+CantidadHoja(Arbol->der);
      }
     if(Arbol->izq==NULL && Arbol->der==NULL)
       return x+1;
     else
       return x;
    }

    int AlturaNodo(nodo Arbol,int elem)
    {  int x=0;
      if(Arbol->dato!=elem)
        x=1000;
      if(Arbol->dato>elem && Arbol->izq!=NULL)
        x=AlturaNodo(Arbol->izq,elem)+1;
      if(Arbol->dato<elem && Arbol->der!=NULL)
        x=AlturaNodo(Arbol->der,elem)+1;
    return x;
    }

    void Dibujar(nodo Arbol,int a,int b,int c,int d)
    {
     char value[3];
     if(Arbol!=NULL)
      {
       itoa(Arbol->dato,value,10);
       circle(300+a,75+b,14);
       setcolor(YELLOW);
       outtextxy(295+a,75+b,value);setcolor(WHITE);
       if(d==1) line(300+a+pow(2,c+1),b+14,300+a,61+b);
       else if(d==2) line(300+a-pow(2,c+1),b+14,300+a,61+b);
    Dibujar(Arbol->izq,a-pow(2,c)-pow(2,d-4),b+75,c-1,1);
    Dibujar(Arbol->der,a+pow(2,c)+pow(2,d-4),b+75,c-1,2);
      }
    }

    void HijoPadre(nodo Arbol,int num)
    {
     if(num==Arbol->izq->dato){gotoxy(32,4);
       printf("El Padre es:_%d",Arbol->dato);}

     if(num==Arbol->der->dato){gotoxy(32,4);
       printf("El Padre es:_%d",Arbol->dato);}
     else if(num<Arbol->dato)
       HijoPadre(Arbol->izq,num);
     else if(num>Arbol->dato)
       HijoPadre(Arbol->der,num);
    }


    int Buscar(nodo Arbol,int elem)
    {
      if(Arbol!=NULL)
        {
         if(Arbol->dato==elem)
        return 1;
         else if(elem<Arbol->dato)
         Buscar(Arbol->izq,elem);
         else if(elem>Arbol->dato)
         Buscar(Arbol->der,elem);
        }
      else
        return 0;

    }
  2. #include<conio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<stdio.h>
    #include<graphics.h>

     struct nodo_arbol
           {
        int dato;
           struct nodo_arbol *izq;
           struct nodo_arbol *der;
           };

    typedef struct nodo_arbol *nodo;

    void Insertar(nodo&,int);
    void Eliminar(nodo&,int);
    void Pre_Orden(nodo);
    void In_Orden(nodo);
    void Post_Orden(nodo);
    void Dibujar(nodo,int,int,int,int);
    int  CantidadNodos(nodo);
    int  Altura(nodo);
    int  CantidadHoja(nodo);
    int AlturaNodo(nodo,int);
    void LongitudHoja(nodo,int,int);
    int Contar(nodo,int);

    void Ejecuta(int);
    void Resalta(int);
    void Marco(int,int,int,int);
    void Marco_temp(int,int,int,int);
    char *Titulos[]={"Inicializar",
             "Insertar",
             "Pre-Orden",
             "In-Orden",
             "Post-Orden",
             "Eliminar",
             "Graficar",
             "Altura",
             "Nivel",
             "Cantidad[Nodos]",
             "Cantidad[Hojas]",
             "Contar",
             "Salir"};
    nodo raiz;

    void main()
    {
      char Opc;
      int Y=1,f;
      textmode(C80);
      do
       {
        textcolor(1);
        textbackground(2);
         clrscr();
         gotoxy(5,7);printf(" ");gotoxy(5,17);printf(" ");
          gotoxy(5,9);printf("Û");  gotoxy(5,10);printf("Û");
         gotoxy(5,11);printf("Û"); gotoxy(5,12);printf("Û");
         gotoxy(5,13);printf("Û"); gotoxy(5,14);printf("Û");
         gotoxy(5,15);printf("Û"); gotoxy(5,16);printf("Û");
         Marco_temp(4,6,6,18);gotoxy(5,8);printf("Û");

        Marco(30,79,1,25); gotoxy(6,3);cprintf("ARBOL BINARIO ");
        Marco(4,20,2,4); Marco_temp(4,20,20,22);Marco(5,19,21,23);
        gotoxy(6,22);printf(" X44545X "); Marco(2,29,1,25);
        for(f=0;f<13;f++)
         {
          gotoxy(8,6+f);printf("%s",Titulos[f]);
         }
         Resalta(Y);
         Opc=getch();
        switch(Opc)
          {
           case 72:if(Y==1) Y=13;else Y--;break;
           case 80:if(Y==13) Y=1;else Y++;break;
           case 13:Ejecuta(Y);
          }
       }while(1);
    }


    void Ejecuta(int opc)
    { int a,gdriver=DETECT,gmode;
      switch(opc)
       {
          case 1:raiz=NULL;gotoxy(32,3);
             printf("­ Ya Se Inicializ¢ !");getch();break;
          case 2:gotoxy(32,3);printf("Ingrese Elemento a Insertar:_");
             scanf("%d",&a);Insertar(raiz,a);getch();break;
          case 3:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            Pre_Orden(raiz);getch();break;
          case 4:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            In_Orden(raiz);getch();break;
          case 5:gotoxy(32,3);if(raiz==NULL)printf(" Arbol Vacio");
            Post_Orden(raiz);getch();break;
          case 6:gotoxy(32,3);printf("Ingrese el Numero:_");scanf("%d",&a);
            Eliminar(raiz,a);break;
          case 7:clrscr();initgraph(&gdriver,&gmode,"C:\\borlandc\\bgi");
             Dibujar(raiz,15,3,7,0);getch();cleardevice;closegraph();break;
          case 8:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
              {gotoxy(32,3);printf("Altura del Arbol es:_%d",Altura(raiz));}
               getch(); break;
          case 9:int elem;gotoxy(32,3);printf("De que Numero Desea:_");scanf("%d",&elem);
            if(AlturaNodo(raiz,elem)<1000){gotoxy(32,5);printf("  [%dø] Nivel",AlturaNodo(raiz,elem)+1);}
            else{gotoxy(35,5);printf("­ No Existe !");}getch();break;
          case 10:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
              {gotoxy(32,3);printf("El Arbol tiene [(%d)] Nodos",CantidadNodos(raiz)+1);}
               getch();break;
          case 11:if(raiz==NULL){gotoxy(32,3);printf("­ Arbol Vacio !");} else
             {gotoxy(32,3);printf("El Arbol tiene [(%d)] Hojas",CantidadHoja(raiz));}
              getch();break;
          case 12:int x;gotoxy(32,3);printf("De que Numero Desea:_");scanf("%d",&x);
             gotoxy(35,5);printf("Se repite [%d] veces",Contar(raiz,x));getch();break;
          case 13:Marco(44,63,9,11); Marco_temp(43,64,8,12);
            gotoxy(51,14);printf("­ F I N !");
            gotoxy(44,6);printf("Programa Hecho por:");
            gotoxy(45,10);printf("PORRAS DURAND RAUL");getch();exit(0);break;
      }

    }
    void Resalta(int Y)
    {
      textcolor(RED);
      textbackground(7);
      gotoxy(8,5+Y); cprintf("%s",Titulos[Y-1]);
      textcolor(BLUE);
      textbackground(BLACK);
    }
    void Marco(int x1,int x2,int y1,int y2)
    {
        int i,j;
        for (i=x1;i<x2;i++)
        {
            gotoxy(i,y1); printf("Í");
            gotoxy(i,y2); printf("Í");
        }
        for (j=y1;j<y2;j++)
        {
            gotoxy(x1,j); printf("º");
            gotoxy(x2,j); printf("º");
        }
        gotoxy(x1,y1); printf("É");
        gotoxy(x2,y1); printf("»");
        gotoxy(x1,y2); printf("È");
        gotoxy(x2,y2); printf("¼");
    }

    void Marco_temp(int x1,int x2,int y1,int y2)
    {
        int i,j;
        for (i=x1;i<x2;i++)
        {
            gotoxy(i,y1); printf("±");
            gotoxy(i,y2); printf("±");
        }
        for (j=y1;j<y2;j++)
        {
            gotoxy(x1,j); printf("±");
            gotoxy(x2,j); printf("±");
        }
        gotoxy(x1,y1); printf("±");
        gotoxy(x2,y1); printf("±");
        gotoxy(x1,y2); printf("±");
        gotoxy(x2,y2); printf("±");
    }



    void Insertar(nodo &Arbol,int elem)
    {
      if(Arbol==NULL)
      {
         Arbol=(nodo)malloc(sizeof(struct nodo_arbol));
        if(Arbol==NULL)
          {
        printf("No hay Memoria");
        return;
           }
         (Arbol)->dato=elem;
         (Arbol)->izq=NULL;
         (Arbol)->der=NULL;
         gotoxy(35,5); printf("­ Ya se Insert¢ !");
        }

     else if(elem<=Arbol->dato)
           Insertar(Arbol->izq,elem);
     else if(elem>Arbol->dato)
           Insertar(Arbol->der,elem);
     else{ gotoxy(35,5);
          printf("­ Error !");}
    }

    void Eliminar(nodo &Arbol,int num)
    { nodo p1,p2;
     if(Arbol==NULL){gotoxy(35,5);printf("­ No se Encuentra !");getch();return;}
     if(num<Arbol->dato)
        Eliminar(Arbol->izq,num);
     if(num>Arbol->dato)
        Eliminar(Arbol->der,num);
     else if(Arbol->izq==Arbol->der)
           {
        free(Arbol);
        Arbol=NULL;
           }
     else if(Arbol->izq==NULL)
           { p1=Arbol;
        Arbol=Arbol->der;
        free(p1);
           }
     else if(Arbol->der==NULL)
           { p1=Arbol;
        Arbol=Arbol->izq;
        free(p1);
           }
     else {
          p1=Arbol->der;
          p2=Arbol->der;
         while(p2->izq)
           p2=p2->izq;

        p2->izq=Arbol->izq;
        free(Arbol);
        Arbol=p1;
        }
    }


    void Pre_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
        {
         printf("%d,",Arbol->dato);
         Pre_Orden(Arbol->izq);
         Pre_Orden(Arbol->der);
        }
    }

    void In_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
       {
         In_Orden(Arbol->izq);
         printf("%d,",Arbol->dato);
         In_Orden(Arbol->der);
       }
    }

    void Post_Orden(nodo Arbol)
    {
      if(Arbol!=NULL)
       {
         Post_Orden(Arbol->izq);
         Post_Orden(Arbol->der);
         printf("%d,",Arbol->dato);
       }
    }

    int CantidadNodos(nodo Arbol)
    {  int x=0;
     if(Arbol->izq!=NULL)
      {
       x=CantidadNodos(Arbol->izq)+x+1;
      }
     if(Arbol->der!=NULL)
      {
       x=CantidadNodos(Arbol->der)+x+1;
      }
     return x;
    }

    int Altura(nodo Arbol)
    {  int x=0,y=0;
     if(Arbol->izq!=NULL)
      {
       x=Altura(Arbol->izq)+x+1;
      }
     if(Arbol->der!=NULL)
      {
       y=Altura(Arbol->der)+y+1;
      }
     if(x>y)
       return x;
     else
       return y;
    }

    int CantidadHoja(nodo Arbol)
    { int x=0;
     if(Arbol->izq!=NULL)
      {
       x=x+CantidadHoja(Arbol->izq);
      }
     if(Arbol->der!=NULL)
      {
       x=x+CantidadHoja(Arbol->der);
      }
     if(Arbol->izq==NULL && Arbol->der==NULL)
       return x+1;
     else
       return x;
    }

    int AlturaNodo(nodo Arbol,int elem)
    {  int x=0;
      if(Arbol->dato!=elem)
        x=1000;
      if(Arbol->dato>elem && Arbol->izq!=NULL)
        x=AlturaNodo(Arbol->izq,elem)+1;
      if(Arbol->dato<elem && Arbol->der!=NULL)
        x=AlturaNodo(Arbol->der,elem)+1;
    return x;
    }

    void Dibujar(nodo Arbol,int a,int b,int c,int d)
    {
     char value[3];
     if(Arbol!=NULL)
      {
       itoa(Arbol->dato,value,10);
       circle(300+a,75+b,14);
       setcolor(YELLOW);
       outtextxy(295+a,75+b,value);setcolor(WHITE);
       if(d==1) line(300+a+pow(2,c+1),b+14,300+a,61+b);
       else if(d==2) line(300+a-pow(2,c+1),b+14,300+a,61+b);
    Dibujar(Arbol->izq,a-pow(2,c)-pow(2,d-4),b+75,c-1,1);
    Dibujar(Arbol->der,a+pow(2,c)+pow(2,d-4),b+75,c-1,2);
      }
    }

    int Contar(nodo Arbol,int num)
    {  int x=0;
     if(Arbol==NULL)
       return 0;
     if(num<=Arbol->dato)
     { if(num==Arbol->dato)
        1+Contar(Arbol->izq,num);
       else
        Contar(Arbol->izq,num);
     }
     if(num>Arbol->dato)
     { if(num==Arbol->dato)
        1+Contar(Arbol->der,num);
       else
        Contar(Arbol->der,num);
      }
    }