Вызов рекурсивной функции в push_back - PullRequest
0 голосов
/ 05 апреля 2019

Я пишу функцию для заполнения вектора в порядке возрастания, используя значения из двоичного дерева поиска.Я также пытаюсь сохранить время выполнения этой функции на O (n).Я думаю, что мне нужно будет вызвать рекурсивную функцию, которая пересекает BST и получает числа в порядке возрастания.Я не совсем понимаю, как использовать результаты рекурсивной функции.Можно ли использовать рекурсивную функцию внутри push back, как это?

void vector_function(){
    std::vector<int> *v = new std::vector<int>(); 
    v.pushback(recursive_function(node *p));
}

, например, если дерево бинарного поиска имеет значения 5, 3, 4, 7, результирующий вектор будет иметь 3, 4, 57

1 Ответ

0 голосов
/ 05 апреля 2019

Я не совсем понимаю, как использовать результаты рекурсивной функции.Можно ли использовать рекурсивную функцию внутри push back, как это?

Я могу придумать два способа сделать это.

Опция 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 принимает при вызове функции.Позаботьтесь о вызове 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); });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...