C++相談室 part48
■ このスレッドは過去ログ倉庫に格納されています
0269デフォルトの名無しさん
2006/03/24(金) 16:48:13漏れは、各ノードに「親ノードへのポインタ」と「子ノードへのポインタのリスト」を持つようにした。
struct tree {
tree* parent;
std::list<tree*> children;
T value;
};
実際にはstructではなくclassで、各メンバはprivateにした上でアクセサを定義。
イテレータとして
1. 子ノードイテレータ
typedef std::list<tree*> children_type;
typedef typename children_type::iterator children_iterator;
2. preorder_iterator(begin()、end()で先頭・末尾の次を取得でき、全ノードを前置順走査する)
3. postorder_iterator(rbegin()、rend()で先頭・末尾の次を取得でき、全ノードを後置順走査する)
を用意。tree::iteratorにpreorder_iteratorをtypedefしておく。
子ノードの追加はoperator+, +=、削除はoperator-, -=
これにストリーム入出力つけて300行くらい。でもコード見たらboost::iterator_facade使ってた。
■ このスレッドは過去ログ倉庫に格納されています