Witam,
nie wiem gdzie robię błąd w zmienianiu pesudokodu na kod c++, ciągle wywala mi jakieś błędy w tej funkcji. Cały program zrobiony jest na wskaźnikach więc nie posiada tablic.
Kod w c++
BSTNode * BST::remove(BSTNode * x) //!!!!!
{
int y;
int key;
BSTNode * T = x->p, *z;//węzeł y jest rodzicem usuwanego węzła
if ((left[x])= NULL || (right[x])= NULL) //sprawdzamy czy węzeł ma obu potoków
{
y=x;
}
else
{
y =remove(succesor(x));
}
x = left[y];
if(x=NULL)
{
x =right[y];
}
if (x != NULL)
{
x->p = y->p;
}
if(p->y = NULL)
{
root (T) = x;
}
else
{
if(y = y ->lefy->p)
{
y->left->p=x;
}
else
{
y->right->p= x;
}
}
if(y != z)
{
key [z] =key [y];
}
return y;
A tutaj pseudokod
1. if left[z] = Nil lub right[z] = Nil //z ma co najwy»ej jednego syna
2. y = z
3. elsey = BST-Successor(z) // y b¦dzie zycznie usuni¦ty
4. x = left[y]
5. if x = Nil
6. x = right[y] // x jest jedynym synem y, o ile y nie jest bezdzietny
7. if x 6= Nil
8. p[x] = p[y] // poprawiono x-owi ojca
9. if p[y] = Nil // zycznie usuwany y jest korzeniem drzewa T
10. Root(T) = x
11. else
12. if y = left[p[y]] // usuwany y jest lewym synem swego ojca
13. left[p[y]] = x
14. else right[p[y]] = x // poprawiono ojca usuwanego y-a
15. if y 6= z
16. key[z] = key[y] // klucz key(z) wpisywany jest do wierzchoªka z przypadek 3
17. return y