總時間限制:
1000ms
記憶體限制:
65535kb
描述
眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a+b*c,可以表示為如下的表示式樹:
+/ \
a *
/ \b c
現在,給你乙個中綴表示式,這個中綴表示式用變數來表示(不含數字),請你將這個中綴表示式用表示式二叉樹的形式輸出出來。
輸入輸入分為三個部分。
第一部分為一行,即中綴表示式(長度不大於50)。中綴表示式可能含有小寫字母代表變數(a-z),也可能含有運算子(+、-、*、/、小括號),不含有數字,也不含有空格。
第二部分為乙個整數n(n < 10),表示中綴表示式的變數數。
第三部分有n行,每行格式為c x,c為變數的字元,x為該變數的值。
輸出輸出分為三個部分,第乙個部分為該表示式的逆波蘭式,即該表示式樹的後根遍歷結果。佔一行。
第二部分為表示式樹的顯示,如樣例輸出所示。如果該二叉樹是一棵滿二叉樹,則最底部的葉子結點,分別佔據橫座標的第1、3、5、7……個位置(最左邊的座標是1),然後它們的父結點的橫座標,在兩個子結點的中間。如果不是滿二叉樹,則沒有結點的地方,用空格填充(但請略去所有的行末空格)。每一行父結點與子結點中隔開一行,用斜槓(/)與反斜槓(\)來表示樹的關係。/出現的橫座標位置為父結點的橫座標偏左一格,\出現的橫座標位置為父結點的橫座標偏右一格。也就是說,如果樹高為m,則輸出就有2m-1行。
第三部分為乙個整數,表示將值代入變數之後,該中綴表示式的值。需要注意的一點是,除法代表整除運算,即捨棄小數點後的部分。同時,測試資料保證不會出現除以0的現象。
樣例輸入
a+b*c3a 2
b 7c 5
樣例輸出
abc*++/ \
a *
/ \b c
37
數算A 表示式 表示式樹 表示式求值
這道題在輸出上太坑了,畫出來不像樹.1 include2 include3 include4 using namespace std 5int val 26 n,len,ans,maxdep 6char infix 55 postfix 55 out 50 300 7 struct node 13 ...
表示式求值問題之表示式樹
include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...
表示式求值與字尾表示式
乙個算術表示式,含有數字 為簡化處理,數字只有一位 運算子 以及括號,求表示式的值。給出的表示式是一般我們見到的中綴表示式,即運算子位於運算元之間。如果把中綴表示式轉化為字尾表示式,那麼對字尾表示式求值將會很方便。字尾表示式特點 1.操作符位於運算元之後 2.沒有括號 3.運算子沒有優先順序。中綴表...