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
代わりにこれを使用する必要がありますか?もしそうなら、あなたはそれを行う方法の例を与えることができますか?