Я все еще работаю над моими двоичными деревьями, и функции вставки, поиска, максимума и минимума до сих пор работают отлично.Поэтому я хочу сделать функцию удаления дальше.Я включил стек, который спасает, черт возьми, я просто покажу код:
class Tree
{
private:
int value_;
Tree *root_;
Tree *left_;
Tree *right_;
std::stack<Tree*> treeStack;
Функция удаления:
int Tree::eraseTree()
{
while( !treeStack.empty() )
{
Tree *temp = treeStack.top();
treeStack.pop();
delete temp;
}
if( treeStack.empty() )
return 1;
else
return -1;
}
Я получаю ошибки сейчас.Это не будет большой проблемой - я пытаюсь отладить свой собственный код - за исключением того, что на этот раз он говорит мне, что в файле библиотеки <deque>
есть ошибка, которую я даже не использую.
Перед тем, как программа закрывается, я получаю System.AccessViolationException
, и неисправный код указывает на файл deque
.Конечно, этого не может быть, это должен быть некоторый указатель в моем коде.Это заставляет меня поверить, что я неправильно работаю со стеком или неправильно вставляю в стек.
Что я здесь не так делаю?Я действительно удаляю узлы, когда я вызываю .pop в стеке?
РЕДАКТИРОВАТЬ:
if( !root_ )
{
root_ = new Tree(val, 0, 0);
treeStack.push(root_);
return val;
}
И
Tree *parent = findInsertionPoint(val, root_);
if( val < parent->value_ )
parent->left_ = new Tree(val, 0, 0);
else
parent->right_ = new Tree(val, 0,0);
treeStack.push(parent);
return val;
ГдеЯ помещаю свои элементы в стек.
Дополнительный вопрос: Должен ли std :: stack быть встроен в ctor?