質問: a->value + b->value; delete a; delete b; } ``` }
回答: 2つの選択肢があります: 葉の評価: 1 - 値を積み重ねてスタックする non_leafの評価: 1 - eval left、 - REMEMBER:評価結果がスタックに追加されました。 2 - eval right、 3 - ポップ2アイテム、 4 - 計算する、 5 - 結果をプッシュします。 最後に1つのアイテムがスタックにあります - 最後の結果 **編集:** ``` void expression_tree::evaluate(node *temp, stack& s) { if(!temp) return; if(temp->left != NULL && temp->right != NULL){ //only 1 pointer is illegal! evaluate(temp->left); evaluate(temp->right); node* n2 = s.pop(); node* n1 = s.pop(); //in the stack should be only leaves temp->value = n1->value + n2->value;//use switch by operator delete temp->left; temp->left = NULL; delete temp->right; temp->right=NULL; } s.push (temp); } ```