Un programa que atraviesa y genera nodos hoja en orden (un programa en lenguaje C que se puede ejecutar en C++)
#include
#include
typedef?struct?bitnode{
int? fecha;
estructura?bitnode?*?lchild,?*rchild;
}bitnode,*bitree;
int?j=0;
//Descripción de la función
bitree?*createbitree(bitree?*T);
int?Qtraversebitree(bitree?T);
int ?Ztraversebitree(bitree?T);
int?Htraversebitree(bitree?T);
int?Ftraversebitree(bitree?T);
/** *******************Función principal****************************** */ p>
main()
{
bitree?Tree,*T?;?int?k?
{
printf("\n╔------------------------------------- ---- ------╗");?//Mostrar un menú simple
printf("\n┆?Creación de pedidos anticipados----1?Recorrido de pedidos anticipados- -----2 ┆");
printf("\n┆?Recorrido en orden----3?Recorrido posterior al pedido------4┆");
printf( "\n┆?Número de hojas---?5?Salir del programa------6┆");
printf("\n╚-- -------- -------------------------------------╝\n") ;?
printf("Ingrese el número de secuencia de la operación a realizar:?");
scanf("%d",&k);//Aceptar la elección del usuario
switch(k) //Aceptar funciones de usuario
{case?1:?printf("Cuando los subárboles izquierdo y derecho estén vacíos, reemplácelos con 0 y sepárelos con espaciadores: \n");
T=createbitree(&Tree);
romper;
?case?2:Qtraversebitree(*T?);
romper;
?case?3:Ztraversebitree(*T?);
romper;
?case?4:Htraversebitree(*T ?);
break;
?case?5:printf("\nEl número de hojas es:?%d\n",Ftraversebitree(*T?));
break;
?case?6:break;
default:printf("¡Selección incorrecta! Vuelva a seleccionar\n");break;
}
} while(k!=6); //Hasta que se le asigne un valor de 6
return ?0;?
}
/************************Crear función de árbol binario* *********** *************************/
bitree?*createbitre
e(bitree?*T)
{
char?ch;
scanf("%d",&ch);
if(ch==0)?
(*T)=NULL;
else{?
if(!((*T)?=( bitnode?*)malloc(sizeof(bitnode))))
exit(0);
(*T)->date?=?ch;?//Generar nodo raíz ?
createbitree(&(*T)->lchild);
createbitree(&(*T)->rchild);
} return?T ;
}
/************************Función transversal de preorden****** ****** *******************/
Qtraversebitree(bitree?T)
{?
if( T){printf("%d?",T->fecha);
?if(Qtraversebitree(T->lchild))
?if (Qtraversebitree(T-> rchild))?return?1;
return?0;
}
else?return?1;
} p>
/************************Función transversal en orden********* *************** *******/?
Ztraversebitree(bitree?T)
{?
if(T){if(Ztraversebitree(T-> lchild))
?printf("%d?",T->fecha);
if(Ztraversebitree (T->rchild))?return?1;
return?0;
}
else?return?1;
}
/***** *******************Función transversal del postorder*************** **************/
Htraversebitree(bitree?T)
{?
if(T){if (Htraversebitree(T->lchild))
if( Htraversebitree(T->rchild))?
printf("%d?",T->fecha);?return ?1;
¿regresar?0;
}
más?regresar?1;
}
/************************ *Devuelve la función de número de nodo hoja*************/
Ftraversebitree(bitree?T)
{?
if(T){if(!((T->lchild)||(T->rchild))) ?j++;?
?if(Ftraversebitree(T->lchild))
?if(Ftraversebitree(T->rchild))?return?j;
retorno?j;
}
<p> más?regresar?j;
}