als eine Übung arbeite ich an einem binären Suchbaum. Ich habe es geschafft, den Binärbaum zu durchsuchen und Knoten hinzuzufügen, aber jetzt, wo ich versuche, einen Weg zu finden, zu löschen, scheint ich bei wie fest, wer der Elternteil eines Knotens ist, die gelöscht werden soll.Lösche Knoten aus dem binären Suchbaum, ohne Eltern in der Struktur gespeichert zu haben
So beginnen mit i dieser Struktur
struct BST_node {
struct double_linked_list *data;
struct BST_node *left;
struct BST_node *right;
};
und ich habe auch einen Zeiger für diese Struktur haben, die Fußpunkte ..
struct BST_node *BST_email_root = 0;
ich diese Funktion für einen Knoten suchen
struct BST_node *BST_find_customer(struct BST_node *root, char *email) {
if (root==NULL)
return NULL;
if (strcmp(email,root->data->data->email)==0)
return root;
else
{
if (strcmp(email,root->data->data->email)==-1)
return BST_find_customer(root->left,email);
else
return BST_find_customer(root->right,email);
}
, die ich innerhalb anderer Funktionen aufrufen, durch Verwendung von
b = BST_find_customer(BST_email_root, email);
und ich versuche, um die Funktion zu erstellen löschen nodes..What i dies ist haben: auch
struct BST_node *BST_delete(struct BST_node *root, char *email)
{
struct BST_node *temp;
if (root==NULL)
return root;
else if(strcmp(root->data->data->email,email)>0)
root->left = BST_delete(root->left, email);
else if(strcmp(root->data->data->email,email)<0)
root->right = BST_delete(root->right, email);
else
{
if(root->left == NULL && root->right == NULL)
{
free(root);
root = NULL;
}
else if(root->right == NULL)
{
temp = root;
root = root->left;
free(temp);
}
else if(root->left == NULL)
{
temp = root;
root = root->right;
free(temp);
}
else
{
struct BST_node *maxNode = findMaxNode(root->left);//finding the maximum in LEFT sub-tree
root->data = maxNode->data; //Overwriting the root node with MAX-LEFT
root->left = BST_delete(root->left, maxNode->data);//deleted the MAX-LEFT node
}
return root;
}
}
Mit dieser Funktion
struct BST_node *findMaxNode(struct BST_node *root)
{
if(root->right == NULL) return root;
findMaxNode(root->right);
}
jedoch diese nicht funktioniert auch und ich bekomme Fehler
Versuchen Sie, einen Zeiger auf den vorherigen Knoten zu halten, den Sie durchlaufen haben. –