c++ - 在递归函数中存储堆栈

标签 c++ recursion binary-tree

我正在尝试搜索一个二叉搜索树,并在我遍历该树时将每个节点存储在一个堆栈中,以便记住我的路径,以便我可以执行旋转。

这是我的代码:

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;
   }
}

我认为问题是每次调用函数时堆栈都超出范围,所以当它找到我正在寻找的值时,它是唯一存储在堆栈中的东西。所以我的问题是,如何使堆栈包含我遍历的每一项,而不仅仅是最后一项?

最佳答案

将一个(非常量)引用连同其他参数一起传递到堆栈。 您可能需要一个“设置”函数来最初创建堆栈。

关于c++ - 在递归函数中存储堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478310/

相关文章:

c++ - 优先队列和dijkstra

c++ - 双递归如何在 C/C++ 中工作——例如二叉树的深度?

javascript - 如何将多个变量传递给 Angular ng-include 中的 onload?

c - 将节点插入二叉树时我在哪里做错了?

c++ - 删除有两个 child 的目标

java - 如何左右遍历二叉树?

c++ - 我需要知道如何将 c 字符串从一个变量复制到另一个变量,以便让第三个函数在我的程序中工作

c++ - 如何在 Visual Studio 2008 (C++) 中打印函数的返回类型?

c - 为什么程序在递归地从数组添加到队列时崩溃?

c++ - 为什么需要在类之外定义静态数据成员?