Cześć! Pisze rotację drzewa BST wikipedia. Dla przypadku w ktorym wszystkie liscie istnieją nie ma problemu, przypadkiem problematycznym jest moment gdy, odwołując się do prawego wezła liścia P (oznaczenie jak na wiki, rotacja w prawo) jest on NULL. Tworząc wsk->right = temp
nie działa ze względów oczywistych - nie istnieje, natomiast gdy zrobie (*wsk).right=&temp
działa, ale po wyjściu z funkcji do której korzeń jest przekazywany przez wskaznik debubugger pokazuje "unable to read memory". Co może być problemem?
//parent_node wskazuje na miejsce wzgledem ktorego ma byc rotacja, z wiki lisc Q
void r_rotation(leaf *root, leaf *main)
{
leaf *parent_node, *parent;
leaf temp, temp2;
parent = return_parent(root, main->key);
if (parent->key > main->key)parent_node = (*parent).left;
else parent_node = (*parent).right;
if (main->left != NULL)
{
if (main->left->right != NULL)
{
temp2 = *(main->left->right);
temp = *(main);
*(parent_node) = *(main->left);
*(parent_node->right) = temp;
*(parent_node->right->left) = temp2;
}
else
{
temp = *(main);
temp.left = NULL;
*(parent_node) = *(main->left);
(*parent_node).right = &temp;
//cout << parent_node->right->key;
}
}
}
Brutalne add_leaf(parent_node, &temp);
też nie dało rady.