一、前言
針對前一篇博文後綴表達式求值、中綴表達式到後綴表達式的轉換,已經可以實現中綴表達式到後綴表達式的轉換,這裏再介紹根據後綴表達式構建表達式樹,那我們就能夠從這兩種常用類型的輸入表達式(中綴和後綴)生成表達式樹。
二、構造表達式樹
由前一篇博文可知,後綴表達式的特點是:一定以兩個操作數開始,且以操作符結尾,形如“a b + c d e + * *”就是一個後綴表達式。而這篇博客要介紹的表達式樹的特點就是:樹的樹葉是操作數(常數或變量),而其他節點爲操作符。由於一般的操作符都是二元的,所以表達式樹一般的都是二叉樹。
如同後綴表達式求值一樣,我們逐次讀取後綴表達式的每一個符號
如果符號是操作數,那麼我們就建立一個單節點樹並將一個指向它的指針推入棧中;
如果符號是操作數,則從棧中彈出兩棵樹T1和T2(先彈出T1),並形成一顆以操作符爲根的樹,其中T1爲右兒子,T2爲左兒子;
然後將新的樹壓入棧中,繼續上述過程。
如“a b + c d e + * *”生成表達式樹的主要過程如下圖所示:
(1)依次讀入操作數a 和 b,並壓入棧中
(2)遇到操作符“+”
(3)遇到c d e 操作數
(4)遇到“+”操作符
(5)遇到“*”操作符
(6)遇到“*”操作符