Балансировка АВЛ-дерева (в функции deleteNodeHelper на algorithmtutor.com)
Мне нравится реализация АВЛ-дерева на algorithmtutor (код на C++ здесь).
Но авторы оставили часть кода незавершённым: в функции deleteNodeHelper нет балансировки.
Я пытался вставить updateBalance в разные места кода, но прога всё время крашится.
Помогите, пожалуйста, кто шарит, дописать функцию... Я уже не знаю, что ещё сделать.
NodePtr deleteNodeHelper(NodePtr node, int key) {
// search the key
if (node == nullptr) return node;
else if (key < node->data) { node->left = deleteNodeHelper(node->left, key); }
else if (key > node->data) { node->right = deleteNodeHelper(node->right, key); }
else {
// the key has been found, now delete it
// case 1: node is a leaf node
if (node->left == nullptr && node->right == nullptr) {
delete node;
node = nullptr;
}
// case 2: node has only one child
else if (node->left == nullptr) {
NodePtr temp = node;
node = node->right;
delete temp;
}
else if (node->right == nullptr) {
NodePtr temp = node;
node = node->left;
delete temp;
}
// case 3: has both children
else {
NodePtr temp = minimum(node->right);
node->data = temp->data;
node->right = deleteNodeHelper(node->right, temp->data);
}
}
// Write the update balance logic here
// YOUR CODE HERE
return node;
}
P.S. Я пытался:
Добавить
updateBalance(node);перед финальнымreturn.Аналогично, но с добавлением
return node;в case 1 и case 2.Добавить
updateBalance(node);в ветки(key < node->data)и(key > node->data)...
Результат – краш.