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().
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
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