別のツリーにコピーしたいバイナリツリー T があります。
すべてのノードで評価される visit メソッドがあるとします。
struct visit
{
virtual void operator() (node* n)=0;
};
そして私は訪問者アルゴリズムを持っています
void visitor(node* t, visit& v)
{
//do a preorder traversal using stack or recursion
if (!t) return;
v(t);
visitor(t->left, v);
visitor(t->right, v);
}
2 つの質問があります。
- ブーストグラフがこれを行うことがわかったので(頂点訪問者)、ファンクターベースのアプローチを使用することにしました。また、同じコードを繰り返してツリーをトラバースし、各ノードで異なることを行う傾向があります。これは、重複したコードを取り除くための良い設計ですか? 他にどのような代替デザインがありますか?
- これを使用して、既存のバイナリ ツリーから新しいバイナリ ツリーを作成するにはどうすればよいですか? 必要に応じて訪問ファンクターにスタックを保持できますが、それは訪問者のアルゴリズムに結び付けられます。
- ここにポストオーダートラバーサルを組み込むにはどうすればよいですか? 別のファンクタークラス?