map 関数を使用してツリー式を評価する方法がわかりません。関数は次のようになります
int Tree::evaluate(std::map< std::string, int > ipMap){
私の先生は、例として印刷をポストオーダーする関数を見るヒントをくれましたが、これがどのように適用されるかわかりません。ここにあります:
void Tree::postOrderPrint(){
if(NodeType==TYPE_OPERATOR)
{
leftPtr->postOrderPrint();
rightPtr->postOrderPrint();
std::cout<< Op << " " ;
}
else
{
std::cout<< Op << " " ;
}
}
ツリーがすでに構築されていて、前の関数から解析された文字列であり、実際にこの関数が行うすべてのことは、次の関数と同等のものである場合はどうなりますか?
int arithmetic_expression::evaluateTree(TreeNodePtr rootPtr)
{
if ((rootPtr->Op=="+") | (rootPtr->Op=="-")|(rootPtr->Op=="*")|(rootPtr->Op== "/"))
{
if (rootPtr->Op=="+")
{
return(evaluateTree(rootPtr->leftPtr)+ evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="-")
{
return(evaluateTree(rootPtr->leftPtr)- evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="*")
{
return(evaluateTree(rootPtr->leftPtr)* evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="/")
{
return(evaluateTree(rootPtr->leftPtr)/ evaluateTree(rootPtr->rightPtr));
}
}
else
{
int Number;
std::istringstream(rootPtr->Op) >> Number;
return(Number);
}
}
関数を呼び出しているのは次のとおりです。
int arithmetic_expression::evaluate_Expression(std::map< std::string, int > ipMap)
{
if (tree != NULL){
return(tree->evaluate(ipMap));
}
else
return(0);
}
これは理にかなっているように見えますか?
int Tree::evaluate(std::map< std::string, int > ipMap){
std::map<std::string, int >::iterator myIter;
myIter=ipMap.find(Op);
{
if (myIter=="+")
{
return(evaluate(leftPtr)+ evaluate(rightPtr))
}
if (myIter=="-")
{
return(evaluate(leftPtr)- evaluate(rightPtr));
}
if (myIter=="*")
{
return(evaluate(leftPtr)* evaluate(rightPtr));
}
if (myIter=="/")
{
return(evaluate(leftPtr)/ evaluate(rightPtr));
}
}
else{