使用visitor和builder模式创建基于堆栈的二进制表达式计算器

时间:2017-03-26 20:36:49

标签: c++ binary-tree builder visitor-pattern

所以,我正在使用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; 

0 个答案:

没有答案