Implementación del algoritmo de clasificación de árboles binarios (diseño del curso de estructura de datos)
# include & ltstdio.h & gt
#define NUM 7 //Definición de macro
int I; Definición de tipo de variable
nodo de estructura typedef {
int data; //campo de datos
nodo de estructura * siguiente//campo de puntero
}Nodo, * LNodo//Construir nodo y puntero correspondiente con estructura.
estructura de árbol typedef {
int data;
estructura de árbol* izquierda
estructura de árbol*derecha;
}Árbol, *LTree//Construye un árbol y su puntero correspondiente con una estructura.
CreateList( LNode Head) //Crea una única lista enlazada.
{
for(int I = 1; I<= NUMI++) //Crea un bucle e ingresa NUM datos en secuencia.
{
LNodo temperatura; //Nodo intermedio
temp =(LNode)malloc(sizeof(Node)); //Asignación de almacenamiento dinámico
temp->next = NULL //Inicialización del nodo intermedio
scanf("%2d",&temp->data //Ingrese el campo de datos temporales asignado al nodo
p>temp->next = Head->Next;
head->next = temp//Inserte el nodo temporal en la lista vinculada
}
Return 1; //Return 1
}
insert sqtree(LTree & Root, LNode temp) //Configuración del principio de clasificación del árbol binario
p>
{
If (!root)//Ejecutado cuando la raíz está vacía.
{
root =(LTree)malloc(sizeof(Tree));//Asignación de almacenamiento dinámico
root-& gt; p>
root-& gt; right = vacío; // inicialización
root-& gt; temp-& gt; 1; //La función se ejecuta normalmente y devuelve 1.
}
Otro
{
if(root->data>= temp->;data)
p>
Devuelve insert sqtree(root->left, temp); //Compara el subárbol izquierdo insertado
else if(root->data<temp->;data)
Devuelve insert sqtree(root-& gt; right, temp); //Compara el subárbol derecho insertado
}
Devuelve 1; , no se procesará y se devolverá 1.
}
Void BianLiTree(LTree root) //Utilice el recorrido de orden medio para ordenar todos los números en orden ascendente de izquierda a derecha.
{
If(root) //root no está vacío y no se puede ejecutar.
{ BianLiTree(root->left); //Procesa recursivamente los nodos de izquierda a hoja, no se ejecuta cuando root->;cuando left está vacío.
printf("%4d", root->data); //Salida
Árbol doble (raíz->par); //Procesa el nodo correcto
}
}
int main()
{
LNode Head = NULL
LRaíz del árbol = NULL//Inicialización
head =(LNode)malloc(sizeof(Node));//Asignación de almacenamiento dinámico
head->; next = NULL//Inicialización
>printf("Ingrese un número:\ n "); //Ingrese la declaración de solicitud
If (!CreateList( Head )) //No ejecute la siguiente declaración, la lista enlazada individualmente regresa exitosamente 1.
Devuelve 0; //Finaliza la función y devuelve 0.
LNode temp = Head-& gt; Next; //Asigna el campo de puntero del puntero principal al nodo intermedio.
Detener la ejecución cuando while(temp) //temp esté vacío.
{
If (!InsertSqTree(root, temp)) //La clasificación se ejecuta normalmente, devuelve 1 y no ejecuta la siguiente declaración.
Devuelve 0; //Finaliza la función y devuelve 0.
head->next = temp->Next; //Asigna el campo de puntero del puntero intermedio al campo de puntero del nodo principal.
Free (temporal); //Liberar espacio
temp = Head-& gt; Next //Asigna el campo del puntero principal al nodo intermedio, los tres anteriores; oraciones Implementado el movimiento hacia atrás del puntero temporal.
}
printf("El resultado es:\ n "); //Instrucción de solicitud de salida
BianLiTree(root); recorra la salida y observe los nodos del árbol.
Devuelve 1; //La función es normal y devuelve 1.
}