c++ - 在 push_back 中调用递归函数
问题描述
我正在编写一个函数来使用二叉搜索树中的值按升序填充向量。我也试图将这个函数的运行时间保持在 O(n)。我想我需要调用一个遍历 bst 并按升序获取数字的递归函数。我对如何使用递归函数的结果感到困惑。像这样在推回中使用递归函数可以吗?
void vector_function(){
std::vector<int> *v = new std::vector<int>();
v.pushback(recursive_function(node *p));
}
例如,如果二叉搜索树的值为 5、3、4、7,则结果向量将具有 3、4、5、7
解决方案
我对如何使用递归函数的结果感到困惑。像这样在推回中使用递归函数可以吗?
我可以想到两种方法。
选项1
更改recursive_function
为也接受对 a 的引用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));
}
选项 2
更改 recursive_function
为也接受一个std::function
. 更新其实现以std::function
使用节点的值适当地调用 。使用可以转换为在函数调用std::function
中recursive_function
接受的 lambda 函数。请注意push_back
在传递给它的参数的情况下调用 lambda 函数中的向量。
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); });
}
推荐阅读
- csv - Spark 文件格式转义\n 加载 CSV
- javascript - 量角器:Browser.wait() Timeout 在 Jasmine defaultTimeoutInterval 上超时
- firebase - 出现 vuefire+firebase 绑定集合错误
- python - 类型错误:跨 excel 组合数据时,'Sheet' 对象不可调用
- android - 在多用户应用程序上存储首选项
- android - 迷宫示例不生成迷宫
- html - 如何根据角度 6 中的条件禁用复选框?
- batch-file - 批处理文件:使用 IF EXIST
- c# - SonarQube 跳过对带有视图的 ASP.NET Core 项目的分析
- asp.net - 如何通过asp.net和angular中的网络套接字传递接口?