我正在编写一个函数,使用二进制搜索树中的值按升序填充向量。我也在尝试将此函数的运行时间保持为O(n)。我想我将需要调用一个遍历bst并以升序获取数字的递归函数。我对如何使用递归函数的结果感到困惑。这样在推回中使用递归函数可以吗?
void vector_function(){
std::vector<int> *v = new std::vector<int>();
v.pushback(recursive_function(node *p));
}
例如,如果Binary Search树的值为5、3、4、7,则结果向量将具有3、4、5、7
答案 0 :(得分:0)
我对如何使用递归函数的结果感到困惑。这样在推回中使用递归函数可以吗?
我可以想到两种方法。
更改recursive_function
也接受对std::vector<int>
的引用。适当地将其实现更新为向量的push_back
个元素。
调用时将向量传递给recursive_function
。
void recursive_function(node* p, std::vector<int>& v)
{
// When appropriate...
v.push_back(p.data);
}
并将其用作
void vector_function(){
std::vector<int> v;
recursive_function(p, v));
}
将recursive_function
更改为也接受std::function
。更新其实现,以使用适当的节点值调用std::function
。使用可以转换为std::function
在该函数调用中接受的recursive_function
的lambda函数。请注意在lambda函数中的向量上调用push_back
并传递参数。
void recursive_function(node* p, std::function<void(int)> f)
{
// When appropriate...
f(p.data);
}
并将其用作
void vector_function(){
std::vector<int> v;
recursive_function(p, [&v](int e) -> void { v.push_back(e); });
}