私は次のようなノードクラスを使用して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
に、例のように再帰関数を実装しています。
それは機能しますが、ツリーで機能する新しい関数ごとに同じ再帰コードを何度も書くことになります。
プレーン配列の場合のようにツリー構造を反復する一般的な方法はありますか?ブランチ全体が完了するまで、次のオブジェクトを返すメソッド。
編集:
これまでコメントしてくださった皆様、ありがとうございました。あなたの助けを借りて、問題を絞り込むことができました。私の理解から(私はc ++を初めて使用します)、ツリーをトラバースするためのコードをカプセル化するイテレータークラスが必要です。
すべてのツリーメンバーへのアクセスは、次のように簡単にする必要があります。
for (Node<Node*>::iterator it = _node.begin(); it != _node.end(); ++it) {
Node *node = *it;
// do something with *node
}
今の質問は:
このようなイテレータを実装するにはどうすればよいですか?