码迷,mamicode.com
首页 > 其他好文 > 详细

LintCode "Expression Tree Build"

时间:2015-10-19 15:40:22      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:

Lesson learnt: for any calculator problems, keep 2 stacks: 1 for operators and 1 for operands.

class Solution 
{
    stack<ExpressionTreeNode*> op;
    stack<ExpressionTreeNode*> data;
    
    void eval()
    {
    ExpressionTreeNode *opnode = op.top(); op.pop();
    ExpressionTreeNode *data1 = data.top(); data.pop();
    ExpressionTreeNode *data2 = data.top(); data.pop();
    opnode->left = data2;
    opnode->right = data1;
    data.push(opnode);
    }
public:
    ExpressionTreeNode* build(vector<string> &expression) 
    {
    for(auto &tmp : expression)
    {        
        ExpressionTreeNode *node = new ExpressionTreeNode(tmp);
         
        switch(tmp[0])
        {
        case (:                         
            op.push(node);
            break;
        case +:
        case -:
            while(!op.empty()&&op.top()->symbol[0]!=()
            {
            eval();
            }                         
            op.push(node);
            break;
        case *:
        case /:
            while(!op.empty()&&(op.top()->symbol[0]==*||op.top()->symbol[0]==/))
            {
            eval();
            }                         
            op.push(node);
            break;
        case ):
            while(op.top()->symbol[0]!=()
            {
            eval();
            }
            op.pop();
            break;
        default:
        data.push(node);
        break;
        }        
         }
         while(!op.empty())
     {
             eval();
         }
         
         if(data.empty()) return nullptr;
         return data.top();
   }  
};

LintCode "Expression Tree Build"

标签:

原文地址:http://www.cnblogs.com/tonix/p/4891851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!