0

AB *B+という式から構築されたツリーを返す関数が必要です。各ノードのタイプはstruct

struct Node {
std::string name;
Node* left;
Node* right;
}

ここで、式AB *B+を解析する必要があります。からスタックがありstd::vector<Node*>ます。

1)Aのノードを作成し、スタックにプッシュします

2)Bのノードを作成し、スタックにプッシュします

3)*のノードを作成し、Bをポップして右に割り当て、Aをポップして左に割り当てます。*をスタックにプッシュします

これは、式が完了するまで続きます。

これで、ツリーのルートにアクセスできる場合は、すべてのノードにアクセスできるはずです。ただし、それらすべてを関数のスタックに割り当てるので、ルートノードを返すときに推測しています。ノードはRHSにコピーされる可能性がありますが、それが指す子は無効です。

std::vector<Node> nodes作成された瞬間にすべてのノードを別の場所に保存する必要があります。スタックを使用して親子関係を作成しnodes、値で返しますか?これは機能しますか?

または、std::shared_ptr代わりにこれを使用する必要がありますか?もしそうなら、あなたはそれを行う方法の例を与えることができますか?

4

1 に答える 1

0

コピーによって、私はあなたがこれを意味していると推測しています:

    Node* root = Null;
    root = nodeStack.pop();

私はあなたが本当にあなたのアルゴリズムを完全にフォローしています. それはうまくいくはずです。絶対。アルゴリズムの実装に問題がある可能性があります。

于 2013-07-03T06:37:09.217 に答える