Помогите разобраться с удалением корня бинарного дерева поиска. У меня программа вылетает при удалении корня. Остальное работает
template<class T>
Node<T>* Tree<T>::deleteNode(Node<T>* node, T val)
{
if (root == nullptr)
{
cout << "No data in this tree" << endl;
return nullptr;
}
if (node == nullptr)
{
cout << "Data not found!" << endl;
return node;
}
if (val == node->getData())
{
Node<T>* tmp = root;
if (node->getRight() == nullptr)
tmp = node->getLeft();
else {
Node<T>* ptr = node->getRight();
if (ptr->getLeft() == nullptr)
{
ptr->setLeft(node->getLeft());
tmp = ptr;
}
else
{
Node<T>* pmin = ptr->getLeft();
while (pmin->getLeft() != nullptr)
{
ptr = pmin;
pmin = ptr->getLeft();
}
ptr->setLeft(pmin->getRight());
pmin->setLeft(node->getLeft());
pmin->setRight(node->getRight());
tmp = pmin;
}
}
delete node;
return tmp;
}
else if (val < node->getData())
node->setLeft(deleteNode(node->getLeft(), val));
else
node->setRight(deleteNode(node->getRight(), val));
return node;
}
template<class T>
void Tree<T>::deleteNode(T val)
{
auto cur = root;
Node<T>* target = deleteNode(cur, val);
}