在push_back中调用递归函数

时间:2019-04-05 20:19:02

标签: c++ c++11 recursion vector

我正在编写一个函数,使用二进制搜索树中的值按升序填充向量。我也在尝试将此函数的运行时间保持为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

1 个答案:

答案 0 :(得分:0)

  

我对如何使用递归函数的结果感到困惑。这样在推回中使用递归函数可以吗?

我可以想到两种方法。

选项1

更改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));
}

选项2

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