es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , ,

Answer

  1. Avatar for 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:

    struct node * add(struct node * root,int newData){
        if (root==NULL)
        {
            struct node * newNode = (struct node *)malloc(sizeof(struct node));
            newNode->data=newData;
            newNode->left=NULL;
            newNode->right=NULL;
            return newNode;
        }
    
        struct node * tmp = root;
        if (tmp->data<newdata) tmp-="">right = add(tmp->right,newData);
        if (tmp->data >newData)
            tmp->left = add(tmp->left,newData);
        return tmp;
    }
    

    Esto debería eliminar el error de violación de segmento y agregar correctamente los nodos al árbol de búsqueda binaria.</newdata)>

Comments are closed.