我试图通过二叉搜索树进行搜索,并将每个节点存储在堆栈中,以便遍历树以记住我的路径,以便我可以执行旋转。在递归函数中存储堆栈
这里是我的代码:
template <typename T>
bool BST<T>::contains(const T& v, BSTNode *&t)
{
stack<BSTNode*> s;
BSTNode * g;
BSTNode * p;
if(t == NULL)
return false;
else if(v < t->element){
s.push(t);
return contains(v, t->leftChild);
}
else if(v > t->element){
s.push(t);
return contains(v, t->rightChild);
}
else
{
t->search_c += 1;
if(t->search_c > threshold) //we need to rotate
{//begin rotation
cout << s.size(); //outputs 1
}//end rotation
return true;
}
}
我觉得现在的问题是,堆栈(S)超出范围的每个函数被调用一次,所以当它发现我在寻找它的价值是存储在堆栈中的唯一东西。所以我的问题是,我该如何做到让堆栈包含我遍历的每个项目而不仅仅是最后一个项目?
你可以让堆栈变成一个静态变量吗?或者将栈作为参数传递给函数? – dhorn 2011-03-29 20:10:44
你可以作为第三个参数传递堆栈吗?当然,通过参考;) – fredoverflow 2011-03-29 20:11:40