2013-08-03 3 views
4

Я пытался реализовать BST в C++. Это специальная функция-член, выполняемая для обхода и возврата вектора с элементами дерева. Теперь проблема возникает с функцией pop pop(), которую я установил для текущего узла.
void value not ignored as it ought to beBST: значение void не игнорируется, так как оно должно быть

Я понимаю, что пустой стек будет возвращать значение недействительного после предыдущего попа() call.But то, что это решение этой проблемы, потому что это необходимо в этом traversal algorithm получить последний узел из стека.

vector <int> BSTree::in_order_traversal() 
{ 

vector <int> list; 
stack <Node *> depthStack; 
Node * cur = root; 

while (!depthStack.empty() || cur != NULL) { 
       if (cur != NULL) { 
         depthStack.push(cur); 
         cur = cur->left; 
                } 
       else        { 
         cur = depthStack.pop(); // Heres the line 
         list.push_back(cur->key); 
         cur = cur->right; 
                 } 

                                      } 
return list; 

} 
+0

Вы делаете что-то в своем коде с «возвращаемым значением» функции возврата в пустоту. Прекратите делать это, это не имеет никакого смысла. – Mat

ответ

7

В C++ функция

std::stack::pop() 

не возвращает значение удаляется из стека. Причина в том, что вообще невозможно вообще написать такую ​​функцию с точки зрения безопасности исключений.

Необходимо сначала сохранить это значение, а затем удалить его с помощью pop ... например.

Node *x = depthStack.top(); 
depthStack.pop(); 
Смежные вопросы

 Смежные вопросы