Mam taki algorytm, (wzorowany z książki Cormena o algorytmach):
public void tree_delete(Node D, Node v) {
Node y = null;
Node x = null;
if (v.left_son == null || v.right_son == null) {
y = v;
} else {
y = tree_next(v);
}
if (y.left_son != null) {
x = y.left_son;
} else {
x = y.right_son;
}
if (x != null) {
x.rodzic = y.rodzic;
}
if (y == null) {
D.korzen = x;
} else {
if (y == y.rodzic.left_son) {
y.rodzic.left_son = x;
} else {
y.rodzic.right_son = x;
}
if (y != v) {
v.wartosc = y.wartosc;
}
}
}
Czy ktoś mi może powiedzieć, czemu nie działa prawidłowo?
I jak zrobić aby działał?
Problemem jest usuwanie elementu, który ma rodzica i dwoje dzieci(w innych przypadkach raczej działa):
czyli, jakoś tak to wygląda:
1
3
2 4
W tym przykładzie, usuwam element '3', i usuwa się ale tracę powiązanie, czyli wtedy wygląda to tak:
1
2 4
Zamiast:
1
4
2
Co z tym jest nie tak?