Preguntas sobre programación de estructuras de datos sobre pila
#include "stdio.h"
#include "stdlib.h"
#define NULL 0
#define m 5
nodo de estructura
{
int elem;
nodo de estructura *lchild, *rchild; ;
nodo de estructura *T, *p, *q;
nodo de estructura* Eliminar(nodo de estructura*t);
void EliminarNodo(nodo de estructura* t);
void insertnode(struct node*t, int kx);
void postordertraverse(struct node *t);
int searchelm(struct node *t, int k);
int set_key();
void principal()
{
int x, i= 0, L[m], clave, encontrada;
printf("1********** genera un árbol de clasificación binario\n");
printf ("2************Recorrido en orden\n");
printf("3************Buscar elemento\n"
do{
printf("Seleccione: ";
key=set_key();
switch(clave); )
{
caso 1:
T=(struct node*)malloc(sizeof(struct node));
T -gt; lchild=NULL;
T-gt; rchild=NULL
para(i=0; ilt; m; i )
{
printf("Ingrese los datos dth: ", i 1);
scanf("d", amp; L[i]); /p>
T-gt;elem=L[0];
for(i=1;ilt;m;i)
insertnode(T,L[ i ]);
break;
caso 2:
printf("Recorrido a mitad de secuencia: "); ;
printf("\n");
break;
default:
printf("Ingrese el elemento a buscar para: ");
scanf("d",amp;x);
found=searchelm(T,x);
if(found==0)
printf("No existe tal elemento\n");
else
{
DeleteNode( T);
if(T==NULL)
printf("Elimine el elemento y el árbol de clasificación estará vacío"); >
printf("Eliminar el elemento, recorrer la secuencia: ");
postordertraverse(T);
printf("\n"); p > }
}
}mientras(1);
}
void insertnode(struct node*t, int kx)
{
estructura nodo*t1
if(t)
{
if(kxlt; t -gt;elem)
{
if(!(t-gt;lchild))
{
t1=( nodo de estructura*)malloc(sizeof(nodo de estructura));
t1-gt; elem=kx
t-gt; t1 -gt; lchild=NULL;
t1-gt; rchild=NULL
}
else
insertnode(t- gt ; lniño, kx);
}
else
{
if(!(t-gt;rchild))< / p>
{
t1=(struct node*)malloc(sizeof(struct node));
t1-gt;elem=kx;
t1-gt;elem=kx;
t-gt;rchild=t1;
t1-gt;lchild=NULL;
t1-gt ; rchild=NULL;
}
else
insertnode(t-gt; rchild, kx); >
}
}
void postordertraverse(struct node *t)
{
if(t!=NULL)
{
postordertraverse(t-gt;lchild);
printf("d ", (*t).elem);
postordertraverse(t-gt;rchild);
}
}
int searchelm(struct node *t, int k)
p>
{
int bandera=0
p=q=t
mientras(q)
{
if(kgt; q-gt; elem)
{
p=q
q=q-gt; ;
}
else if(klt; (q-gt;elem))
{
p=q; p> p>
q=q-gt;lchild;
}
else
{
flag=1;
p>
descanso
}
}
retorno(bandera);
void DeleteNode(struct node*t)
{
struct nodo *s; /p>
{
s=Eliminar(T);
T=s
}
más p>
{
s=Delete(q);
if(p-gt;rchild==q)
p-gt;rchild =s;
else
p-gt;lchild=s;
}
}
estructura nodo* Eliminar(estructura nodo* t1)
{
estructura nodo*p1, *p2, *t
t=t1;
if(t- gt;rchild!=NULL)
{
t=t-gt;rchild;
p2=p1=t;
while(p1!=NULL)
{
p2=p1;
p1=p1-gt
p>}
p2-gt; lchild=t1-gt;
}
else if(t-gt; lchild!= NULL)
t=t-gt;
else
t=NULL
return(t); p>
}
int set_key()
{
int clave
static int flag=0 ; p>
for( ;;)
{
mientras(1)
{
scanf("d", amp;key);
p>if(key==1||key==2||key==3)
break;
else
p
rintf("Ingrese 1, 2 o 3; vuelva a ingresar: ");
}
if(key==1)
flag=1;
if(flag==1)
break;
else
printf("Error de entrada; vuelva a ingresar: ") ;
}
return(key);
}
Mi escritura es muy buena