Функция C-lang, которая стирает все элементы дерева, она не разрушается, когда я ее вызываю, но результат, когда я пытаюсь отобразить дерево или вызвать любую функцию, дающую ей (_root) в качестве параметра, это сокрушает

void free_tree(tree *_root) {//testing, not working
    tree p= *_root;
    if (p) {
        if (p->left) free_tree(&p->left);
        if (p->right) free_tree(&p->right);
        free(p);
    }
}

Я проверил любую другую вещь за пределами функции, которая может вызвать ошибку, но, похоже, все работает отлично, спасибо, кто может ответить

-3
Hocine Abdellatif 30 Май 2018 в 16:12

1 ответ

Лучший ответ

Вы не устанавливаете для *_root значение NULL. Поскольку функция вызывает себя рекурсивно, только первый фактический параметр будет корневым узлом, поэтому я бы вместо этого просто назвал параметр t . Кроме того, не нужны левые / правые нулевые проверки. Попробуй это:

void free_tree(tree *t) {
    tree p = *t;
    if (p != NULL) {
        free_tree(&p->left);
        free_tree(&p->right);
        free(p);
        *t = NULL;
    }
}
1
August Karlstrom 30 Май 2018 в 14:38