表達式(前綴,中綴,后綴表達式)與二叉樹


1. 概念

  • 前綴表達式(Prefix Notation)是指將運算符寫在前面操作數寫在后面的不包含括號的表達式,而且為了紀念其發明者波蘭數學家JanLukasiewicz,所以前綴表達式也叫做“波蘭表達式”
  • 后綴表達式(Postfix Notation)與之相反,是指運算符寫在操作數后面的不包含括號的算術表達式,也叫做逆波蘭表達式
  • 中綴表達式(InfixNotation)就是常用的將操作符放在操作數中間的算術表達式。前綴表達式和后綴表達式相對於中綴表達式最大的不同就是去掉了表示運算符優先級的括號

2. 與二叉樹關系
前綴表達式對應於二叉樹的前序遍歷

中綴表達式對應於二叉樹的中序遍歷

后綴表達式對應於二叉樹的后序遍歷

3. 中綴轉后綴
人工轉換的方法,假設有一個中綴表達式a+b*c-(d+e)

首先將這個中綴表達式的所有運算加括號((a+(b*c))-(d+e))
然后將所有運算符放到括號后面,這樣就變成了((a(bc)* )+ (de)+ )-
把所有括號去掉abc*+de+ -,最后得出的結果就是后綴表達式
4. 表達式轉二叉樹
表達式(前綴,中綴,后綴表達式)的特點:樹的樹葉是操作數(常數或變量),而其他節點為操作符。
根據上面的特點我們可以把表達式轉成二叉樹。
如(a+b)*c-(d+e)的二叉樹表示為:
tips:可以先寫為:((a+b)*c))-(d+e)),轉的時候記得去除括號

 

 

轉為二叉樹之后對其進行不同的遍歷就形成了不同的表達式了。

5. 后綴表達式計算機求值
從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 op 棧頂元素),並將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果

例如后綴表達式“3 4 + 5 × 6 -”:

從左至右掃描,將3和4壓入堆棧;
遇到+運算符,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與前綴表達式做比較),計算出3+4的值,得7,再將7入棧;
將5入棧;
接下來是×運算符,因此彈出5和7,計算出7×5=35,將35入棧;
將6入棧;
最后是-運算符,計算出35-6的值,即29,由此得出最終結果。
為什么要設計后綴表達式,有什么好處?
便於用棧實現計算,而且不需要表示運算符優先級的括號。
————————————————
原文鏈接:https://blog.csdn.net/qq_22771739/article/details/88077977


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM