ベクター ベースのバイナリ ツリーがあり、さまざまな走査方法を使用して、ツリー内の各値に関数を適用する必要があります。preorder トラバーサルは、再帰関数を使用して実装するのが非常に簡単でしたが、inorder および postorder トラバーサルで同じことを行うのに問題がありました。誰かがそれを助けることができれば、それは素晴らしいことです!
含める必要のある追加情報: ノードのベクトルを使用しています。各ノードには、そのノードが満たされているかどうかを示すブール変数と、テンプレート化されたデータ変数が含まれています。各ノードはインデックス「i」に格納され、その左の子はインデックス「2i+1」に、右の子は「2i+2」に格納されます。
リストに事前注文トラバーサルを適用するために、最初にインデックス 0 に格納されたデータを処理し、次にこの再帰関数を呼び出しました。
template <typename Item, typename Key>
template <typename Function>
void BST<Item,Key>::preTraverse(int n, Function f) {
if(tree[n].occupied == false) return;
else {
f(tree[n].data);
preTraverse(2*i+1,f);
preTraverse(2*i+2,f);
}
}
私の「n」パラメータとしてインデックス1と2で始まる2回。