Programa de árbol binario completo y correcto en lenguaje C
#include
#include
#define maxsize 100
typedef struct btnode
{
int data ; //tipo de datos del nodo
struct btnode *lchild, *rchild; //definir los hijos izquierdo y derecho como tipo de puntero p>
} bitree;
bitree *creat(bitree *t) //Crear un árbol binario
{
bitree *s,*p ,* q;
int x;
scanf("%d",&x);
while(x!=0)
{
s= (bitree *)malloc(sizeof(bitree));
s->data=x;
s->lchild= s- >rchild=NULL;
if(t==NULL)
t=s;
else
{
p=t;
mientras(p)
{
q=p;
si(s -> datos
p=p->lchild;
else
p=p->rchild;
}
if(s->data
q->lchild=s;
else
q ->rchild=s;
}
scanf("%d",&x);
}
return( t) ;
}
bitree *insert(bitree *t) //insertar nodo
{
bitree *s,* p, *q;
int x;
scanf("%d",&x);
while(x!=0)
{
s= (bitree *)malloc(tamañode(bitree));
s->data=x;
s->lchild =s ->rchild=NULL;
if(t==NULL)
t=s;
else
{
p>
p=t;
mientras(p)
{
q=p
if(s- >datos
p=p->lchild;
else
p=p->rchild;
} p>
if(s->data
q->lchild=s;
else
q-> rchild=s;
q->rchild=s
}
scanf("%d",&x);
}
return(t);
}
void search(bitree *t,int k) //buscar datos
{
int bandera=0;
mientras(t!=NULL)
{
if(t->data==k )
{
printf("¡Encontré el número a buscar!\n");
flag=1;
break;
}
else
if(t->data t=t->rchild; else t=t->.lchild; } if(bandera!=1) printf( "¡No se encontraron los datos a encontrar! \n"); } bitree *dele(bitree *t,int k) //eliminar datos { int bandera; bitree *p,*q,*s=NULL,*f; f=t; while(t !=NULL) //buscar datos { if(t->data==k) { printf("¡Encontré el número buscado!\n"); break; } else if(t->datos { p=t; t=t->rchild; bandera =0; } más { p=t; t=t-> lchild; flag=1; } } } if(t-> lchild==NULL&&t->rchild==NULL) //eliminar nodo hoja { free(t); if(flag==0) p->rchild=NULL; else p->lchild=NULL; } else { if(t->lchild==NULL&&t->rchild! =NULL) //elimina el nodo que tiene solo el subárbol derecho { if(flag==0) p->rchild=t- >rchild; else p->lchild=t->rchild; gratis(t); } p> else { if(t->lchild!=NULL&& amp;t->rchild==NULL) //eliminar nodo con solo el subárbol izquierdo p> { if(flag==0) p->rchild=t->lchild; else p->lchild=t->lchild; free(t); } else //eliminar nodos en los subárboles izquierdo y derecho p> { p=t; t=t->lchild; q=t; mientras (t->rchild) { q=t; t=t->rchild; } if(t==q) { p->datos=t->datos; p->lchild=t- >lchild; gratis(t); } else { p->datos =t->datos; q->rchild=t->lchild; gratis(t) } } } return(f); } salida nula(bitree * t) //imp> p> { bitree *q[maxsize],*p. int f,r q[0]=t; /p> f=r=0; mientras (f<=r) { p=q[f]; p> p> f++; printf("%d ",p->datos if (p ->lchild!=NULL) { r++; q[r]=p->lniño; } si ( p ->lniño! if (p->rniño!=NULL) { r++; =p->rchild ; } } } void main() { bitree *q=NULL,*r; int m,n,x=1; while(x==1) { sistema("cls"); printf(" ******************* ***** ********\n"); printf(" Para crear presione 1\n"); printf(" Para crear presione 1\n") ; printf("Para buscar, presione 3\n"); printf("Para eliminar, presione 4\n"); printf("Pantalla Por favor presione 5\n"); printf(" Salga presione 0\n"); printf(" ******* ******* * *******************\n"); scanf("%d",&m); sw tch(m) { caso 1: printf("ingrese los datos y finalice con '0'\n"); r=creat( q); system("pause");break; case 2:printf("Ingrese los datos y finalice con '0' \n"); r=insert( r);break; caso 3:printf("Ingrese el número a buscar:"); scanf("%d",&n); search(r,n); system("pause"); break; case 4:printf("Por favor, introduzca el número a eliminar:"); scanf("%d",&n); r=dele(r,n); printf("Datos de entrada eliminado! \n"); system("pausa"); break; caso 5: salida(r);system("pausa" );printf("\n"); ruptura; caso 0:x=0; ruptura; } } }