二叉樹計算中綴表示式

2021-07-10 05:27:13 字數 1129 閱讀 6968

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

#include using namespace std;

class calc

; struct node

};node *root;

node *create(char * &s);

type gettoken (char * &s, int &value);

int result (node *t);

public:

void preorder(node* &t);

calc (char *s)

int result()

};calc::node *calc::create(char * &s)

}return root;

}calc::type calc::gettoken(char *&s, int &data)

return data;

}if (*s == '\0') return eol;

type =*s; ++s;//程式到這一步,就說明這個字元既不是數字也不是空字元,而且下次的掃瞄的是s指向的字串中的下乙個字元。

switch(type)

}//根結點一定是運算子,且是最後乙個加入計算的運算子

int calc::result(node *t)

num1=result(t->lchild);

cout<

cout<

cout<

}int main()

{

calc exp("(3+5)*7/(8-4)");

cout修改的地方是當掃瞄到「)」時,給出乙個標誌位flag記錄此時的type,當下乙個符號比括號裡的表示式的運算子高階時,進行建立新的根結點而不是將這個結點作為原來根結點的子結點。

顯示結果如下:

中綴表示式轉二叉樹

關於中綴表示式轉二叉樹,其實很簡單,只要記住這幾句話就夠了 就這麼簡單 這樣說可能還有人聽不懂 舉個栗子 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...

利用二叉樹實現中綴表示式的計算

之前按照資料結構的課本 李忠月版 實現了利用兩個棧來進行中綴表示式的計算,下面這段 可以實現利用二叉樹來進行中綴表示式的計算,計算過程中不適用棧,僅利用二叉樹的後序遍歷思想。include include define init size 10 define incrementsize 10 typ...