У меня есть двоичное дерево на основе векторов, и мне нужно применить функцию к каждому значению в дереве, используя различные методы обхода. Предварительный обход было очень легко реализовать с помощью рекурсивной функции, но у меня возникли проблемы с тем, чтобы сделать то же самое с обходами без порядка и после порядка. Если бы кто-нибудь мог помочь, это было бы здорово!
Некоторая дополнительная информация, которую я должен был включить: я использую вектор узлов, каждый узел содержит логическую переменную, указывающую, заполнен ли этот узел, и переменную шаблонных данных. Каждый узел хранится с индексом «i», в то время как его левый дочерний элемент имеет индекс «2i + 1», а правый дочерний элемент - с индексом «2i + 2».
Чтобы применить к списку предварительный обход, я сначала обработал данные, хранящиеся в индексе 0, а затем вызвал эту рекурсивную функцию
template <typename Item, typename Key>
template <typename Function>
void BST<Item,Key>::preTraverse(int n, Function f) {
if(tree[n].occupied == false) return;
else {
f(tree[n].data);
preTraverse(2*i+1,f);
preTraverse(2*i+2,f);
}
}
дважды, начиная с индексов 1 и 2 в качестве параметра "n".