Josh
Josh

Reputation: 3311

Insert values in Binary Search Trees

I was trying to write a method which set values in a binary search tree. I have implemented a simple technique of recursion to add nodes in the tree. But when I input the values and ran the code I got segmentation fault:

struct Node
{
    int data;
    Node* leftN;
    Node* rightN;

};

typedef Node* Node_ptr;
Node_ptr head;

//INSERT_VALUE FUNCTION
Node* new_node(int key)
{
    Node* leaf = new Node;
    leaf->data = key;
    leaf->leftN = NULL;
    leaf->rightN = NULL;
}
Node* insert_value(Node_ptr leaf, int key)
{
    if(leaf == NULL)
        return(new_node(key));
    else
    {
        if(key <= leaf->data)
            leaf->leftN = insert_value(leaf->leftN, key);
        else
            leaf->rightN = insert_value(leaf->rightN, key);
        return(leaf);   
    }
}

//PRINT FUNCTION
void printTree(Node_ptr leaf)
{
    if(leaf == NULL)
        return;
    printTree(leaf->leftN);
    cout << "Data element: " << leaf->data << endl;
    printTree(leaf->rightN);
}

//MAIN
int main()
{
    Node_ptr root = NULL;
    Node_ptr tail;
    int i;
    int x;

    //initialize values
    for(i = 0; i < 20; i++)
    {
        x = rand() % 1000 + 1;
        tail = insert_value(root, x);
            root = head;
    }

    root = head;
    printTree(root);

    root = head;
    cout << "Head Node: " << root->data << endl;

    return 0;
}

Upvotes: 1

Views: 3040

Answers (1)

josephthomas
josephthomas

Reputation: 3276

You are getting a segmentation fault because you never set the head, there for when you get to the line

cout << "Head Node: " << root->data << endl;

Your root value will be NULL, (since it was set to by head, which is NULL).

A "root" (or "head") node is typically a special case scenario, you should check to see if that node has been constructed at the top of insert_value, and if not, then you assign the node node to it.

Also, your code has in error in it as new_node does not return a value.

Upvotes: 1

Related Questions