根據中綴表示式構建二叉樹

2021-09-13 15:37:53 字數 756 閱讀 4834

本文從中綴表示式轉字尾表示式開始,循序漸進介紹根據中綴表示式構建二叉樹的過程。

從左往右遍歷中綴表示式,無視空格

遇到運算元直接輸出

遇到操作符通過按照以下規則處理:

在遍歷完中綴表示式時讓操作符棧的最後元素出棧

例子:

將(2 + 5) * 3 + 1轉換為字尾表示式

基於上面中綴表示式轉字尾表示式的步驟,新增乙個運算元棧,當遍歷到運算元時將運算元入棧,在操作符出棧時從棧中取出兩個數計算出值後將結果值壓入運算元棧

例子:

計算(2 + 5) * 3 + 1的值

基於上面計算中綴表示式值的步驟,在遍歷到運算元時建立新節點並將該節點壓入運算元棧中。當操作符從操作符棧**棧時為該操作符新建乙個節點,並從運算元棧中pop出兩個運算元節點,將第乙個運算元節點作為新節點的右節點,第二個個作為左節點,之後將這個新節點壓入運算元棧中。當最後乙個操作符出棧時,就構成了二叉樹,且最後乙個操作符節點為根節點。

例子

二叉樹計算中綴表示式

看到 資料結構 思想與實現 這本書裡5.3的程式 給出的程式是有問題的 敲到vs中,發現右閉括號不能起到作用,例如 輸入 3 5 7,輸出則是38,右閉括號沒有起到作用。自己調了很久,終於修改對了,下面是正確的 include using namespace std class calc struc...

中綴表示式轉二叉樹

關於中綴表示式轉二叉樹,其實很簡單,只要記住這幾句話就夠了 就這麼簡單 這樣說可能還有人聽不懂 舉個栗子 a b c d e fa b c d e f a b c d e f從左到右遍歷表示式,找到最後計算的字元 分成3部分 a b c d e f 分為左子樹,根,右子樹 再繼續把每個拆分成三部分,...

中綴表示式生成二叉樹

中綴表示式生成二叉樹,大概應該有遞規,迭代,和編譯原理中的自頂向下的 分析法等。遞規,迭代的思路每次讀出乙個數字,乙個運算子,比較當前運算子和之前符號的優先順序,進行相關的操作。自頂向下的 分析法,做了下,實在忘記的差不多了,先占個位。以後完成。tree.c include head.h struc...