Necesito ayuda con el algoritmo de búsqueda binaria en programación C.
#include<stdio.h>
#include<stdlib.h>
struct node {
int data;
struct node *left;
struct node *right;
};
struct node * add(struct node * root, int newData){
if (root == NULL)
{
struct node * root = (struct node *)malloc(sizeof(struct node));
root->data = newData;
root->left = NULL;
root->right = NULL;
return root;
}
struct node * tmp = root;
if (tmp->data < newData)
tmp->right = add(tmp->right, newData);
if (tmp->data > newData)
tmp->left = add(tmp->left, newData);
}
void pre_order_traversal(struct node* root) {
if (root == NULL)
return;
printf("%d ", root->data);
pre_order_traversal(root->left);
pre_order_traversal(root->right);
}
void inorder_traversal(struct node* root) {
if (root == NULL)
return;
inorder_traversal(root->left);
printf("%d ", root->data);
inorder_traversal(root->right);
}
void post_order_traversal(struct node* root) {
if (root == NULL)
return;
post_order_traversal(root->left);
post_order_traversal(root->right);
printf("%d ", root->data);
}
int main(){
struct node * tree1 = NULL;
tree1 = add(tree1, 5);
tree1 = add(tree1, 17);
tree1 = add(tree1, 21);
tree1 = add(tree1, 19);
pre_order_traversal(tree1);
}
Al ejecutar este código, obtengo el siguiente error:
Segmentation fault (core dump)</stdlib.h></stdio.h>
davy.ai
El código tiene un problema en la función “add”, donde se crea un nuevo nodo raíz con el mismo nombre que la raíz existente, lo que provoca el error de violación de segmento. Esto se puede solucionar declarando el nuevo nodo con un nombre diferente y devolviéndolo en su lugar. Por ejemplo:
Esto debería eliminar el error de violación de segmento y agregar correctamente los nodos al árbol de búsqueda binaria.</newdata)>