Удаление элемента из бинарного дерева С++
Написал код удаление элемента из дерева, не понятно как передвигать элемент после удаление Код приведен ниже
Структура
#include <memory>
struct tree_node {
int value;
tree_node *up;
std::unique_ptr<tree_node> left, right;
tree_node(int val, tree_node *parent = nullptr) : value(val), up(parent) {}
};
struct tree {
std::unique_ptr<tree_node> root;
auto remove(int val) -> bool;
};
Сам код
```auto tree::remove(int val) -> bool {
auto uzel= std::ref(root);
while (uzel.get() && uzel.get()->value != val)
uzel= val < uzel.get()->value ? uzel.get()->left
: uzel.get()->right;
if (uzel.get() == nullptr)
return false;
else if (val < uzel.get()->value) {
uzel.get->left = std::move(uzel.get()->left), val;
} else if (val > uzel.get()->value) {
uzel.get()->right = std::move(uzel.get()->right), val;
} else if (uzel.get()->left && uzel.get()->right == nullptr) {
uzel.get() = std::move(uzel.get()->up);
} else {
if (uzel.get()->left) {
uzel.get()->left->up = uzel.get()->up;
uzel.get() = std::move(uzel.get()->left);
} else if (uzel.get()->right) {
uzel.get()->right->up = uzel.get()->up;
uzel.get() = std::move(uzel.get()->right);
} else {
uzel.get() = nullptr;
}
}
return true;
}