我不知道如何使用map函數來評估我的樹表達式。該功能是這樣的使用std :: map評估表達式樹<std :: string,int>
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{
地圖中'string'和'int'的作用是什麼? – Attila
好吧我試過的是錯的。但我只是應該使用映射來查找樹表達式中的元素是否爲+ - *或/我相信,如果是的話,使用該運算符來評估左邊和右邊的子樹 – user1325578
我仍然看不到你想要如何/需要使用地圖...首先:它是從哪個映射映射到什麼的?我不是指類似於(A + B-C * D)/ E +(F-3)「」1 +(2 * 3)「的類型(字符串和整數) – Attila