所以,我正在使用visitor和builder模式创建一个基于堆栈的二进制表达式计算器,其中二进制表达式存储在二叉树中。我正在使用基于堆栈的访问者模式。我可以解析一个字符串来构建二叉树就好了,但是我无法弄清楚如何在使用访问者模式创建树后最终计算树。
例如,对于表达式,我的树看起来像这样(((5 + 4)* 50) - (10/20):
-
* /
+ 50 10 20
5 4
例如
root->getValue(); //this returns "-"
root->getRC()->getValue(); //this returns "/"
root->getRC()->getRC()->getValue(); //this returns "20"
唯一相关的代码是:
//Node Class
//gets the value, for example 5,4,+,-,etc..
string getValue() {
return value;
}
void Accept(Visitor* v) {
v->VisitNode(this);
}
//gets left child node
Node* getLC() const {
return left;
}
//gets right child node
Node* getRC() const {
return right;
}
我为这个特定的访客编写了框架。我只需要帮助一下VisitNode类。
class CalVis: public Visitor{
public:
stack<unsigned int> s;
public:
CalVis(){};
//need help with this
virtual void VisitNode(Node* n){
}
//When I call this in main, it will return the value of my binary tree
double getResult() {
unsigned int result =s.top();
m_stack.pop();
return result;
}
};
我的主要看起来像这样
CalVis cv;
//root in my example would be a node pointing to the - value
root->Accept(&cv);
//Would be the numerical value of (((5+4)*50)-(10/20) solved
cout<<endl<<"The result: "<<sbsv.getResult()<<endl;