Как исправить 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


Ответы (0 шт):