Utilice el lenguaje C para construir un árbol binario que contenga n nodos, utilice una lista enlazada binaria para almacenarlo y luego implemente el recorrido de pedido previo, medio y posterior del árbol binario.
#include
#include
#define max 100
nodo de estructura typedef{ //Estructura de árbol binario
char data;
struct node *lc,*rc; //Subárboles izquierdo y derecho
}bt,*list;
/*
Árbol binario
A
/ \
B C
/ \ \
D E F
/ / \
K G H
entrada
ABDK000E00C0FG00H00
salida
ABDKECFGH
KDBEACGFH
KDEBGHFCA
*/
int creat(lista*raíz){ // Crea un árbol binario. La raíz usa un puntero bidimensional
char n;
scanf(" %c",&n); %C es por conveniencia La función de intervalo scanf no lee espacios
if (n=='0') //0 es el intervalo
{
*root=NULL; return 0 ; //Fin de la entrada
}
*root=(list)malloc(sizeof(bt));
if (!*root) devuelve 0;
(*root)->data=n;
creat(&(*root)->lc);
creat(&(*root) ->rc);
return 1;
}
int pre(list root){ //Recorrido de preorden
if (!root) devuelve 0
printf("%c",root->data);
pre(root->lc);
pre (root->rc);
return 1;
}
int mid(list root){ //Mid- recorrido de orden
if (!root) devuelve 0;
mid(root->lc);
printf("%c",root->data );
mid(root->rc);
return 1;
}
int bh(lista raíz){ / /Recorrido posterior al pedido
if (!root) devuelve 0
bh(root->lc);
bh(root->rc);
printf( "%c",root->data);
devuelve 1;
}
int suma(lista raíz ,int *cnt){ //Encontrar la suma del número de nodos
if(root){
(*cnt)++;
s
um(root->lc,cnt);
suma(root->rc,cnt);
devuelve 1;
}
return 0;
}
int sumleaf(list root,int *cnt){ //Encuentra el número de nodos hoja
if (root)
{
if ((!root->lc)&&(!root->rc))
{ (*cnt)++ }
sumleaf(root->lc,cnt);
sumleaf(root->rc,cnt);
devuelve 1;
}
return 0;
}
int deep(list root,int *cnt){ //Buscar profundidad
if ( !root)
{
*cnt=0; devolver 0
}
int m,n;
n=m=*cnt;
profundo(root->lc,&m);
profundo(root->rc,&n);
*cnt=m+1;
if(m devuelve 1; } int floor(list root){ //Recorrido de niveles if(root) { list s[max]; ; //Usar cola para almacenamiento front=-1; rear=0; s[rear]=root; //Inicialización while (rear!=front) //Cuando Finalizar cuando la cola esté vacía { printf("%c",s[++front]->data); if (s[ rear ]->lc) {s[1+rear]=s[rear]->lc; rear++ } //Guarda el subárbol izquierdo en la cola if ( s[rear]->rc) {s[1+rear]=s[rear]->rc; rear++ } //Guarda el libro correcto en la cola } devuelve 1; } devuelve 0; } int scop(lista * r ,list *p){ //Copia del árbol if(*r){ *p=(list)malloc(sizeof(bt)); if(*p){ (*p)->datos=(*r)->datos; scop(&(*r)->lc, &( *p)->lc); scop(&(*r)->rc,&(*p)->rc); devuelve 1; p> > } } *p=NULL; devuelve 0; } int sespect( list root,list *p,char e){ //Buscar el puntero de retorno del nodo *p p es un puntero secundario if(root){ if (root->data== e) { *p=root; devolver 1; } sespect(root->lc,p,e); sespect(root->rc,p,e); } devuelve 0; } void main( ){ lista b,s,m int n,t=1 char ch='\0'; p> printf("************Bitree************\n"); while(t){ // Bucle operación printf("input a tree(int):\n"); s=m=b=NULL //Inicialización del árbol binario creat (&b); // Salida del árbol binario según tres recorridos printf("\npre "); printf; ("\ nmid "); medio(b); printf("\nbh "); bh(b); //Buscar el número de nodos, Número de nodos hoja, profundidad n=0; sum(b,&n)("sumdata: %d\n",n); n=0; hojasum(b,&n); printf("hojasum: %d\n",n); n=0; \n", n); //Copia del árbol binario scop(&b,&s); printf("\nscopy árbol:\npre "); pre(s); printf("\nmid "); mid(s); printf("\nbh "); bh(s); printf("\n"); //Buscar nodo printf("busca un dato:\n"); scanf(" %c ",&ch); //Tenga en cuenta que agregar un espacio delante de %C es para espaciado. scanf no lee espacios sespect(b,&m,ch); /p> if(m) printf("sepect : %c \n",m->datos); else printf ("Error, no hay datos: %c \n",ch); //Ingrese 1 para continuar, ingrese 0 para salir printf("continuar ingrese 1, romper entrada 0:\n"); scanf("%d",&t); } }