Árboles Binarios (Programaa)
Árboles Binarios (Programaa)
Árboles Binarios (Programaa)
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#define M 25
struct Arbol {
int Data;
struct Arbol *Hi, *Hd;
} *a, *b, *c;
Arreglo A;
int i, j;
char ch;
main() {
clrscr();
printf("\n\n\t\tArboles Binarios de Búsqueda");
printf("\t\t============================");
LeerArreglo();
Construir(&a, A, 1, 10);
PreOrden(a); printf("\n");
InOrden(a); printf("\n");
PosOrden(a); printf("\n\n\n");
Imprimir(a, 1);
getch();
clrscr();
IngresarDatos();
clrscr();
Imprimir(b, 1);
ch = getch();
c = Copiar(b);
Imprimir(c, 1);
getch();
if (Igual(b, c)) printf("\nSon iguales");
else printf("\nNo son iguales");
getch();
return 0;
}
void LeerArreglo() {
int i, j, k, l;
clrscr();
printf("\n\n\t\tCuántos datos desea ingresar (<25) ");
scanf("%d", &l);
for (i = 1; i <= l; i++) {
gotoxy(10, 3 + i);
printf("A[%d] = ", i);
scanf("%d", &A[i]);
}
for (i = 1; i <= l - 1; i++)
for (j = i + 1; j <= l; j++)
if (A[i] > A[j]) {
k = A[i];
A[i] = A[j];
A[j] = k;
}
}
void IngresarDatos() {
int n;
char ch;
do {
clrscr();
printf("\t\tIngrese un número entero (0 = salir): ");
scanf("%d", &n);
Insertar (&b, n);
} while (n);
}
if ( !(*T) ) {
*T = (struct Arbol *) malloc(sizeof(struct Arbol));
(*T)->Data = x;
(*T)->Hi = NULL;
(*T)->Hd = NULL;
}
else if (x < (*T)->Data) Insertar(&(*T)->Hi, x);
else if (x > (*T)->Data) Insertar(&(*T)->Hd, x);
else YaExiste(x);
}
if ( !(*T) ) NoExiste(x);
else if (x < (*T)->Data) Eliminar(&(*T)->Hi, x);
else if (x > (*T)->Data) Eliminar(&(*T)->Hd, x);
else {
Q = *T;
if (!Q->Hd)
*T = Q->Hi;
else if (!Q->Hi)
*T = Q->Hd;
else {
R = Q->Hd;
while (R->Hi) R = R->Hi;
R->Hi = Q->Hi;
}
*T = Q->Hd;
free(Q);
}
}
if (T) {
printf("%d - ", T->Data);
PreOrden(T->Hi);
PreOrden(T->Hd);
}
}
if (T) {
InOrden(T->Hi);
printf("%d - ", T->Data);
InOrden(T->Hd);
}
}
if (T) {
PosOrden(T->Hi);
PosOrden(T->Hd);
printf("%d - ", T->Data);
}
}
Construir(&(*T)->Hd, A, Me + 1, De);
}
}
R = 0;
if (!A && !B) R = 1;
else {
if (A && B)
if (A->Data == B->Data)
R = Igual(A->Hi, B->Hi);
if (R) R = Igual(A->Hd, B->Hd);
}
return R;
}
if (T) {
I = Copiar(T->Hi);
D = Copiar(T->Hd);
Q = (struct Arbol *)malloc(sizeof(struct Arbol));
Q->Hi = I;
Q->Hd = D;
Q->Data = T->Data;
} else Q = NULL;
return Q;
}
void YaExiste(int x) {
void NoExiste(int x) {