Ich möchte einen Knoten aus einer Balanced BST löschen. Ich schrieb den folgenden Code, und es funktioniert beim Löschen eines Kindes, aber wenn ich einen Knoten mit zwei Kindern löschen möchte, wird eine Verbindung wiederhergestellt, aber ich verliere den anderen Knoten. Dies ist mein Code:Löschen von einer Balanced-Binary-Suchstruktur
Nod* minValue(Nod *p)
{
Nod *q = p;
while (q->stg != NULL)
q = q->stg;
return q;
}
Nod* os_delete(Nod *p, int k)
{
if (p == NULL)
return p;
if (k < p->ch)
{
p->stg = os_delete(p->stg, k);
}
else if (k > p->ch)
{
p->dr = os_delete(p->dr, k);
}
else
{
p->size--;
if (p->stg = NULL)
{
Nod* aux = p->dr;
free(p);
return aux;
}
else if (p->dr == NULL)
{
Nod* aux = p->stg;
free(p);
return aux;
}
Nod* aux = minValue(p->dr);
p->ch = aux->ch;
p->dr = os_delete(p->dr, aux->ch);
}
return p;
}
Zum Beispiel:
9
4 15
1 7 10 18
Wenn ich den Knoten mit dem Schlüssel 4 ist das Ergebnis Baum wird gelöscht werden soll:
9
7 15
10 18
Bearbeiten:
typedef struct nod
{
int ch, size; // ch - key of the node; size - size of node's subtree
struct nod *stg, *dr; // stg - left; dr - right
}Nod;
Mögliches Duplikat von [Löschung im binären Suchbaum] (http://stackoverflow.com/questions/7606185/deletion-in-binary-search-tree) – EOF
s/childs/children /. :-) –
Wie sieht die 'Nod' Struktur/Klasse aus? –