1

Ich habe versucht, eine Methode zu schreiben, die Werte in einem binären Suchbaum festlegt. Ich habe eine einfache Technik der Rekursion implementiert, um Knoten im Baum hinzuzufügen. Aber wenn ich Eingabe der Werte und den Code lief habe ich Segmentierungsfehler:Werte in binäre Suchbäume einfügen

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; 
} 

Antwort

1

Sie einen Segmentation Fault bekommen, weil Sie nie den Kopf gesetzt, dort, wenn Sie auf die Linie bekommen

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

Dein Root-Wert ist NULL, (da er auf head gesetzt wurde, was NULL ist).

A „root“ (oder „Kopf“) Knoten ist in der Regel ein spezieller Fall, sollten Sie prüfen, ob dieser Knoten an der Spitze der insert_value konstruiert worden ist, und wenn nicht, dann weisen Sie den Knoten Knoten zu es.

Auch Ihr Code enthält einen Fehler darin, da new_node keinen Wert zurückgibt.