OP 18 October, 2020 - 01:05 PM
- #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;
}
- #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);
}
}