Как исправить segmenation fault в AA tree
Вот в чем проблема, при заполнении дерева элементами от 1 до 13, я хочу удалить элемент 1(он будет листовой), программа все удаляет, и затем рекурсивно разворачивается, и когда необходимо обновить уровни с помощью decrease level, вызывается ошибка, что tree->left равен NULL, но ведь уровень то NULL не равен, он равен 1, как можно исправить данную ошибку? Проблему выявил отладчиком, но как исправить не понимаю.
AATree Decrease_level(AATree t) // она будет обновлять уровень вершины, которую передают в функцию, в зависимости от значения уровня дочерних вершин.
{
int sb;
sb = std::min(t->left->level, t->right->level) + 1;
if (sb < t->level)
{
t->level = sb;
if(sb < t->right->level) {
t->right->level = sb;
}
}
return t;
}
AATree _DeleteData(AATree t, int key)
{
AATree m;
if (t == NULL)
return NULL;
else if (key < t->key) // Firstly, Find the node that you want to delete.
{
t->left = _DeleteData(t->left, key);
}
else if (key > t->key)
{
t->right = _DeleteData(t->right, key);
}
else { // key == t->key
if (t->left == NULL && t->right == NULL) // У узла нет дочернего дерева, мы можем удалить его без дополнительных действий.
{
//free(t);
//return NULL;
return t->right; // Пустой
}
else if (t->left == NULL) // Имеет только правый дочерний узел
{
AATree l;
l = Successor(t); // получаем преемника
t->right = _DeleteData(t->right, l->key);
t->key = l->key; // Удаляем узел преемник
}
else {
AATree l;
l = Predecessor(t); // получаем предшественника
t->left = _DeleteData(t->left, l->key);
t->key = l->key; // аналогично указанному выше.
}
}
/*if ((t->level > 1) && (t->left == NULL || t->right == NULL)) {
t->level--;
t = Decrease_level(t);
t = Skew(t);
t = Split(t);
}*/
t = Decrease_level(t);
t = Skew(t);
t->right = Skew(t->right);
if (t->right != NULL)
{
t->right->right = Skew(t->right->right);
}
t = Split(t);
t->right = Split(t->right);
return t;
}
Из за того, что tree->left = NULL(А мне нужен tree->left->level, но он берет почему то именно tree->left, судя по отладчику) не работает функций std::min. Как исправить ошибку? Прилагаю скрин как должно выглядеть дерево после вставки

Вот сам код https://repl.it/@RumeOne/Maybe-AA#main.cpp