運算式求值(二叉樹方法/C++語言描述)(三)

來源:互聯網
上載者:User

標籤:span   sse   處理   style   求值   語言   二叉樹   row   字元   

  二叉樹方法求值對運算數處理的方法與棧方法求值不太相同,除了將字串中的運算數轉換為浮點類型外,還需要產生新的節點:

 1 void Calculator::dealWithNumber(char *&pToken) throw(string) 2 { 3     if (!isdigit(*pToken) && *pToken != ‘-‘) 4     { 5         throw string("bad token ‘") + *pToken + "‘"; 6     } 7  8     BinaryTreeNode<Token> * node = new BinaryTreeNode<Token>(); 9     assert(node);10     node->_data._type = NUMBER;11     node->_data._data.num = strtod(pToken, &pToken);12     node->_leftChild = node->_rightChild = nullptr;13     _stkNodes.push(node);14 }

  對其他token的處理則和棧方法求值類似,請參考代碼清單,這裡不再贅述。

  公有方法calculate()直接調用了postOrder()方法,調用前清空用於儲存浮點類型的棧,方法返回後這個棧的棧頂元素即為運算結果:

double Calculator::calculate(){    while (!_stkNumbers.empty())    {        _stkNumbers.pop();    }    BinaryTree::postOrder();    assert(!_stkNumbers.empty());    return _stkNumbers.top();}

  postOrder()方法重寫了從BinaryTree類繼承的postOrder()方法,它在後序遍曆時遇到運算數則壓棧,遇到運算子則彈棧計算:

 1 void Calculator::postOrder(BinaryTreeNode<Token> *node) 2 { 3     if (node) 4     { 5         postOrder(node->_leftChild); 6         postOrder(node->_rightChild); 7         // visit binary tree data 8         if (node->_data._type == NUMBER) 9         {10             _stkNumbers.push(node->_data._data.num);11         }12         else13         {14             assert(!_stkNumbers.empty());15             double d2 = _stkNumbers.top();16             _stkNumbers.pop();17             assert(!_stkNumbers.empty());18             double d1 = _stkNumbers.top();19             _stkNumbers.pop();20             char op = node->_data._data.op;21             _stkNumbers.push(calculate(d1, op, d2));22         }23     }24 }

靜態方法calculate()與棧方法求值中的也相同。

  最後編寫主函數,大功告成!

運算式求值(二叉樹方法/C++語言描述)(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.