2017-04-23 3 views
-2

Ich versuche, eine Löschfunktion im binären Suchbaum zu machen. Ich habe mit der Löschfunktion beendet, aber ich einige Schwierigkeiten mit dem FindMin having() Funktion wie folgt:Wie finde ich den Mindestwert im rechten Teilbaum eines binären Suchbaums

BST* delete_node(BST* root, int key) 
{ 
BST* temp; 
if (root == NULL) 
    return root; 
else if (key < root->key) 
    root->left_child = delete_node(root->left_child, key); 
else if (key > root->key) 
    root->right_child = delete_node(root->right_child, key); 
else //If the key is found delete it according to the following cases 
{ 
    if (root->left_child == NULL && root->right_child == NULL) 
    { 
     free(root); 
     root = NULL; 
    } 
    else if (root->left_child == NULL){ //right child exists 
     temp = root; 
     root = root->right_child; 
     free(temp); 
    } 
    else if (root->right_child == NULL){ //left child exists 
     temp = root; 
     root = root->left_child; 
     free(temp); 
    } 
    else{ 
     temp = FindMin(root->right_child); 
     root->key = temp->key; 
     root->right_child = delete_node(root->right_child, temp->key); 
    } 
} 
return root; /*Returning the address of node to be reattached to 
      the parent of the deleted node*/ 

} 

BST* FindMin(BST* root) //This functions finds the minimum key value in the 
right subtree 
{ 
BST* temp = NULL; 
if (root->left_child != NULL) 
{ 
    temp = FindMin(root->left_child); 
    return temp; 
} 
else 
    return root; 
} 

Ich bin ziemlich sicher, dass ich die FindMin() brauchen werde zu beheben Funktion, um dies zu arbeiten. Aber ich habe Probleme mit meiner Löschfunktion, denn jedes Mal, wenn ich einen Knoten lösche, gibt es einen Fehler, und ich denke, es liegt an FindMin().

+1

Sie getestet * * 'FindMin()'? Es findet den minimalen Knoten im Baum. Wenn Sie den minimalen Knoten im rechten Teilbaum haben wollen, rufen Sie 'FindMin (root-> right_child)' auf. – Beta

+0

Ich habe für ein paar Stunden versucht, aber .. Ich habe gelegentlich Laufzeitfehler aus dem Code, wenn ich das Programm ausführen. Ich sehe keinen logischen Fehler aus dem Code, aber etwas stimmt nicht. Und ja, ich habe FindMin (root-> right_child) in der Funktion delete_node ausprobiert. – MasterGL

Antwort

1

So mache ich Binary Search Tree.

Das ist die Struktur:

struct _Node; 

typedef struct _Node* Position; 

struct _Node 
{ 
    int element; 
    Position left; 
    Position right; 
}; 

Und dies ist die Funktion min Wert für die Suche:

Position SearchMin(Position P) 
{ 
    while(P->left != NULL) 
    { 
     P = P->left; 
    } 
    return P; 
} 
+0

Danke! Es funktioniert :) Ich hatte gerade Probleme mit den letzten NULLs, die ich immer beim Erreichen des kleinsten Wert-Knotens in der Binary-Search-Struktur erhalte. – MasterGL

Verwandte Themen