BST:虚拟价值不应该被忽视,因为它应该是

时间:2013-08-03 15:44:22

标签: c++ binary-tree

我试图在C ++中实现BST。这是一个特定的成员函数,用于遍历和返回带有树元素的向量。 现在问题出现在我设置为当前节点的stack pop()函数中    void value not ignored as it ought to be

我理解空堆栈会在前面的pop()调用之后返回一个void值。但是那么解决方法是什么,导致这个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;

}

1 个答案:

答案 0 :(得分:12)

在C ++中的方法

std::stack::pop()

不会返回从堆栈中删除的值。原因是从异常安全的角度来看,通常无法正确编写这样的函数。

您需要先存储该值,然后使用pop删除它...例如

Node *x = depthStack.top();
depthStack.pop();