Я реализую древовидную структуру в C++ с классом узла, как это:Пользовательские итератор на древовидной структуре в C++
class Node {
protected:
// relations
Node *_parent;
std::vector<Node*> _children;
public:
// some example method
void someMethod(Node *node) {
// do something with *node
for (int i = 0; i < node->_children; i++) {
_children[i]->myFunction;
}
}
}
Теперь, чтобы работать на узлах в моем дереве Я реализую рекурсивные функции, такие как someMethod
в моем примере.
Работает, но в конечном итоге я записываю один и тот же рекурсивный код снова и снова для каждой новой функции, которая работает на моем дереве.
Есть ли общий способ итерации древовидной структуры, как я бы хотел на простом массиве? Некоторые методы, которые возвращают следующий объект, пока я не закончил всю ветвь.
EDIT:
Благодаря всем, кто комментируемые до сих пор, с вашей помощью я мог бы сузить проблему. Из моего понимания (я новичок в C++) мне нужен класс итератора, который инкапсулирует код для перемещения моего дерева.
Доступ всех членов дерева должны быть столь же простым, как:
for (Node<Node*>::iterator it = _node.begin(); it != _node.end(); ++it) {
Node *node = *it;
// do something with *node
}
Теперь вопрос:
Как реализовать такое итератор?
как вы возвращаете 'mostSoFar' и в чем проблема? – ogzd
, вы можете посмотреть это тоже: http://stackoverflow.com/questions/8961605/algorithm-for-creating-iterator-for-binarytree-class – M3taSpl0it
@ogzd Я отредактировал свой вопрос, надеюсь, что теперь это яснее. –