Так что в настоящее время я получаю странное исключение переполнения стека при попытке запустить эту программу, которая считывает числа из списка в файле данных/текста и вставляет его в двоичное дерево поиска. Странно то, что когда программа работает, когда у меня есть список из 4095 номеров в случайном порядке. Однако, когда у меня есть список из 4095 номеров в порядке возрастания (поэтому он создает линейное дерево поиска), он выдает сообщение о переполнении стека. Проблема не в переменной статического счетчика, потому что даже когда я ее удалил, и положил t = новый BinaryNode (x, 1), он по-прежнему выдал исключение переполнения стека. Я попытался отладить его, и он сломался на if (t == NULL){ t = new BinaryNode(x,count);
. Вот функция вставки.проблема переполнения стека в программе
BinaryNode *BinarySearchTree::insert(int x, BinaryNode *t) {
static long count=0;
count++;
if (t == NULL){
t = new BinaryNode(x,count);
count=0;
}
else if (x < t->key){
t->left = insert(x, t->left);
}
else if (x > t->key){
t->right = insert(x, t->right);
}
else
throw DuplicateItem();
return t;
}
хороший титул и тег – Brij
Что такое ваш вопрос? Вы, кажется, уже знаете, что вызывает вашу проблему (создание линейного дерева поиска). Вы пытаетесь понять, почему 4096 вызовов функций переполняют ваш стек? Вы пытаетесь выяснить, почему вы выполняете 4096 вызовов функций? Вы пытаетесь выяснить, как избежать 4096 вызовов функций? – Gabe
Неудивительно ... 'слишком много рекурсии': переполнение стека, на statckoverflow [.com]. ;-) (Просто шучу!) – mjv