ここでの他の回答は、式ツリーをメモリに読み込むことをカバーしていますが、構築したツリーを評価することはカバーしていません。
ツリーを評価するための一般的な戦略は、ツリーがノードとリーフで構成されている必要があることです。ここで、ノードは子を持つ演算子であり、リーフは定数値です。たとえば、式 (((490 * 9) / 2) / 5 / 6 - ((2 / 4 + 3) + 6 * 5)) はツリーに変換されます。
-
/ \
/ \
div +
/ \ / \
div 6 + *
/ \ / \ / \
区分 5 区分 3 6 5
/ \ / \
* 2 2 4
/ \
450 9
このツリーを評価するには、ルートから始めます。最初に左のサブツリーと右のサブツリーを再帰的に評価し、次に 2 つのサブツリー評価の結果に演算子を適用します。各リーフ (数値) はそれ自体に評価されます。
この場合、ルート (-) から開始し、左のサブツリーを 73.5 まで評価し、右のサブツリーを 33.5 まで評価し、減算して最終結果 40 を取得します。
より正確な例として、再帰呼び出しのいくつかのレイヤーが作成された後、ツリーの左端にあるノードを見てみましょう。リーフ 450 は 450 に評価され、リーフ 9 は 9 に評価され、ノード(* 450 9)
(ツリーのノードを Lisp のようなプレフィックス表記で記述) は 4050 に評価されます。したがって、ノード(/ (* 450 9) 2)
から、左の再帰呼び出しは 4050 に評価され、右の再帰呼び出しは 2 に評価されます。つまり、ノード全体が 2025 に評価されます。値を結合する前にノードから再帰呼び出しを行い、各リーフがそれ自体に評価されることを確認する限り、ツリーの評価は簡単です。