Red de conocimiento informático - Conocimiento informático - Programa de árbol binario completo y correcto en lenguaje C

Programa de árbol binario completo y correcto en lenguaje C

Estoy listo para compartirlo con todos ustedes.

#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

} 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 -> datosdatos)

p=p->lchild;

else

p=p->rchild;

}

if(s->datadata)

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- >datosdatos)

p=p->lchild;

else

p=p->rchild;

}

if(s->datadata)

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);

}

else

{

if(t->lchild!=NULL&& amp;t->rchild==NULL) //eliminar nodo con solo el subárbol izquierdo

{

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=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>

{

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;

}

}

}