Cómo crear un árbol binario en C

click fraud protection

Estructura tu árbol binario. Cada árbol binario necesitará una estructura, incluso si solo tiene una variable. Elija un nombre, luego use typedef para crearlo: typedef struct student_data STUDENT_DATA;

Define la estructura. Incluya dos punteros a la misma estructura: struct student_data {int student_ID; int student_grade; ESTUDIANTE_DATOS izquierda, derecho;};

Asigne un puntero a esta estructura de datos, inicializándola en NULL, para que sea la cabeza del árbol: STUDENT_DATA * estudiantes = NULL;

Asigne dos punteros temporales a la estructura de datos: STUDENT_DATA Estudiante nuevo, cur_student;

Use malloc () para crear un nuevo elemento, siempre buscando un error: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) {abort (); }

Complete los campos del nuevo elemento. Establezca sus campos izquierdo y derecho en NULL: new_student-> student_ID = newID; new_student-> student_size = newsize; new_student-> left = NULL; new_student-> right = NULL;

Considere la variable principal. Si la variable head es NULL, este es el primer elemento agregado al árbol, así que configure la variable head para que apunte a ella y listo: if (! Students) {Students = new_student; regreso; }

Maneje la entrada duplicada si el nuevo valor y el valor actual son iguales: if (newID == cur_student-> student_ID) {abort (); }

Trate con valores desiguales. Si el nuevo valor es menor que el valor actual, el nuevo elemento va a la izquierda. Agréguelo inmediatamente si no hay nada a la izquierda. De lo contrario, recorra a la izquierda y haga un bucle: if (newID student_ID) {if (cur_student-> left == NULL) {cur_student-> left = newstudent; return 1; } cur_student = cur_student-> izquierda;

Haga lo mismo a la derecha, de lo contrario:} else {if (cur_student-> right == NULL) {cur_student-> right = newstudent; return 1; } cur_student = cur_student-> derecha; }}

Cree una variable temporal que apunte a la estructura de datos: STUDENT_DATA * cur_student;

Recorra los elementos, verificando el valor deseado: while (cur_student) {if (cur_student-> student_ID == 15) {return cur_student-> student_grade; }

Bifurca hacia la izquierda o hacia la derecha, y repite, si no se encuentra: if (cur_student-> student_ID <15) {cur_student = cur_student-> right; } else {cur_student = cur_student-> left; }

Vea si el bucle termina. Si lo hace, significa que nunca encontró el artículo:} return 0;

Desasigne el árbol binario cuando finalice su programa, ya que no todos los sistemas operativos lo manejarán automáticamente. Esto se hace mejor usando una función recursiva: void deallocate_binary_tree (STUDENT_DATA * tree) {

Desasignar los subárboles izquierdo y derecho de forma recursiva: deallocate_binary_tree (árbol-> left); deallocate_binary_tree (árbol-> derecha);

La búsqueda y la adición a árboles binarios también se pueden realizar mediante la recursividad. Será mucho más fácil de escribir y mantener, pero un poco más difícil de entender, hasta que se acostumbre. Es común crear un árbol binario que contenga solo punteros a una segunda estructura de datos C, a menudo una matriz o lista vinculada, donde residen los datos reales. Cada árbol binario es un índice para buscar rápidamente un solo campo de los datos de la lista.

Eliminar de un árbol binario es un algoritmo muy complicado en C, pero en muchos usos de árboles binarios, los elementos nunca se eliminan.