ノードをバランス型BSTから削除したいとします。私は次のコードを書いて、子を削除する際に働きますが、2つの子を持つノードを削除したい場合、リンクは復元されますが、他のノードは失われます。私はキー4を持つノードを削除したい場合は平衡型バイナリ検索ツリーからの削除
9
4 15
1 7 10 18
は、結果ツリーは次のようになります:
9
7 15
10 18
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;
}たとえば
:これは私のコードです
編集:
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;
[バイナリ検索ツリーでの削除]の可能な複製(http://stackoverflow.com/questions/7606185/deletion-in-binary-search-tree) – EOF
s/childs/children /。 :-) –
'Nod'構造/クラスはどのように見えますか? –