Tecnología

Inicio

Cómo crear un árbol binario en C

árboles binarios en C son una buena manera de organizar los datos de forma dinámica para facilitar su búsqueda. Sin embargo, requieren mucho trabajo para mantener.

Instrucciones

Crear el árbol binario

1 La estructura de su árbol binario. Cada árbol binario necesitará una estructura, incluso si sólo tiene una variable. Elija un nombre, a continuación, utilizar typedef para crearlo:

typedef struct student_data STUDENT_DATA;

2 Definir la estructura. Incluyen dos punteros a la misma estructura:

student_data struct {
int student_id;
int student_grade;
STUDENT_DATA

izquierda, derecha;
};

3 Asignar un puntero a esta estructura de datos, inicializar a NULL, para ser la cabeza del árbol:

* STUDENT_DATA estudiantes = NULL;

Añadir al Árbol Binario

4 Asignar los dos punteros temporales en la estructura de datos:

New_student STUDENT_DATA, cur_student;

5 Utilizar malloc () para crear un nuevo elemento, siempre la comprobación de un error:

if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) {abortar (); }

6 Rellenar los campos del nuevo elemento. Define los campos izquierdo y derecho a NULL:

new_student-> student_id = NEWID;
new_student-> student_size = newSize;
new_student-> izquierda = NULL;
new_student-> derecha = NULL;

7 Tenga en cuenta la variable de cabeza. Si la variable de cabeza es NULL, este es el primer elemento añade al árbol, por lo que establece la variable de cabeza para señalar a la misma, y ​​ya está:

Si {estudiantes = new_student (estudiantes!); regreso; }

8 Comience en la parte superior del árbol:

cur_student = estudiantes;
while (cur_student) {

9 Manejar la entrada duplicada si el nuevo valor y el valor actual son iguales:

si (== NEWID cur_student-> student_id) {abortar (); }

10 Tratar con valores desiguales. Si el nuevo valor es menor que el valor de la corriente, el nuevo elemento va a la izquierda. Añadir inmediatamente si no hay nada a la izquierda. De lo contrario, transversal a la izquierda y bucle:

si (NEWID <cur_student-> student_id) {
si (cur_student-> izquierda == NULL) {
cur_student-> izquierda = newstudent;
volver 1;
}
cur_student = cur_student-> izquierda;

11 Hacer lo mismo a la derecha, de otro modo:

} Else {
si (cur_student-> derecha == NULL) {
cur_student-> derecha = newstudent;
volver 1;
}
cur_student = cur_student-> derecho;
}
}

Buscar en el árbol binario

12 Crear un señalador variable temporal para la estructura de datos:

STUDENT_DATA * cur_student;

13 Configura la variable temporal a la variable de la cabeza:

cur_student = students_head;

14 Bucle a través de los elementos, la comprobación de valor deseado:

while (cur_student) {
si (cur_student-> student_id == 15) {return cur_student-> student_grade; }

15 Rama izquierda o derecha, y el bucle, si no se encontró:

si (cur_student-> student_id <15) {
cur_student = cur_student-> derecho;
} Else {
cur_student = cur_student-> izquierda;
}

dieciséis A ver si termina el bucle. Si lo hace, significa que nunca se encontró el elemento:

}
return 0;

Limpiar

17 Desasignar el árbol binario cuando finaliza el programa, ya que no todos los sistemas operativos van a manejar esto de forma automática. Esto se hace mejor usando una función recursiva:

deallocate_binary_tree void (* STUDENT_DATA árbol) {

18 Observe: Si no hay ningún árbol, no hay nada que hacer:

si el retorno (árbol!);

19 Desasignar los subárboles izquierdo y derecho de forma recursiva:

deallocate_binary_tree (árbol-> izquierda);
deallocate_binary_tree (árbol-> derecha);

20 Desasignar el elemento, y ya está:

libre (árbol);
}

Consejos y advertencias

  • Buscando y añadiendo a los árboles binarios también se puede hacer uso de la recursividad. Esto será mucho más fácil de escribir y mantener, pero un poco más difícil de entender, hasta que se acostumbre a ella.
  • Es común para crear un árbol binario que contiene sólo los punteros en una segunda estructura de datos C, a menudo una matriz o lista enlazada, donde residen los datos reales. Cada árbol binario es un índice para buscar rápidamente un solo campo de los datos de la lista.
  • Eliminación de un árbol binario es un algoritmo muy complicado en C, pero en muchos usos de los árboles binarios, nunca se eliminan elementos.