ошибка сегментации в бинарном дереве

голоса
1

Либо я смотрел на этот код для слишком долго, или я просто не могу понять это. но когда я использую текстовый файл 8000 номера в порядке убывания; 8000, 7999, ... Я получаю ошибку сегментации в функции высоты. Если кто-то мог взглянуть я бы так признательна. Благодарю.

    int BST::height(TreeNode* node)
    {

        int leftSubtree = 0;
        int rightSubtree = 0;
        if (node == NULL)
            return 0;
        else 
        {

            if (node -> getLeft() != NULL)
                leftSubtree = height(node -> getLeft());
            if(node -> getRight() != NULL)      
                rightSubtree = height(node -> getRight());

            if (leftSubtree > rightSubtree)
                return leftSubtree + 1;
            else 
                return rightSubtree + 1;
        }
    }//ends second height
Задан 17/04/2011 в 04:10
источник пользователем
На других языках...                            


1 ответов

голоса
1

Если у вас есть отсортированный список чисел, то вы можете быть хранящим это в списке (худший случай для дерева O (п), если оно не сбалансировано).

В этом случае ваша рекурсивная процедура будет рекурсия 8000 раз с глубиной стека 8000.

Я не знаю, если это достаточно, чтобы переполнение стека, но в любом случае вы должны смотреть на дереве на промежуточных этапах, чтобы увидеть, если все идет вниз крайнюю левую ветвь.

Ответил 17/04/2011 в 05:39
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more