字尾表示式和中綴表示式的轉換
阿新 • • 發佈:2019-01-01
何為字尾表示式
不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *
很好理解,就是一個符號只對其前面兩個數作用
字尾表示式和中綴表示式的轉換
如A+B*(C−D)−E/F
這是怎麼搞出來的呢??
選最靠中的那個優先順序最低的符號開始(±),把算數式分為2個部分,若符號數大於二,樹的左兒子是左邊的符號,右兒子是右邊的符號,若符號不夠兩個,那麼就把數字或字母放在相應的位置。然後又在這兩個部分裡進行同樣的操作。
然後,樹建好之後,對它進行一次後序遍歷,將每個節點的值寫出即可。
什麼是後序遍歷?就是先遍歷左子樹,再遍歷右子樹,最後遍歷根節點的一種遍歷順序。
相應的有:
中序遍歷(先遍歷左子樹,然後訪問根結點,最後遍歷右子樹),可以得到相應的中綴表示式(就是一般算數式)
前序遍歷(先訪問根結點然後遍歷左子樹,最後遍歷右子樹),字首表示式(將運算子寫在前面,運算元寫在後面的表示式,也叫波蘭式)
於是A+B*(C−D)−E/F的字尾表示式就是ABCD-*+EF/-
字首表示式就是-+A*B-CD/EF(字首表示式在不確定中綴表示式的情況下不唯一)
當中綴表示式和字首表示式確定時才可以確定字尾表示式,同理,當中綴表示式和字尾表示式確定時才可以確定字首表示式
還有一種用棧的方式,直接給連結了: