一般的なツリーに対して反復子を定義したいと思います。バイナリ 1 の例 (ウィキペディアから) を次に示します。
イテレータを使用すると、このツリー構造を順番にたどることができます。std::stack を使用して簡単に実現できます (スタックからノードを取得し、現在のものとして設定し、その子をスタックに追加します)。
しかし、「後方」にあるノードも取得したいと思います。
サンプル画像のノードは、次の順序で訪問する必要があります: F、B、A、B*、D、C、D*、E、D*、B*、F*、G、I、H
「*」 - ノードが逆方向にアクセスされることを意味します。
Iterator は、それが「通常の」訪問であるか、逆方向の訪問であるかの情報も格納する必要があります。
それを処理するには、どのようなアプローチをとりますか?