演算法競賽入門經典第11章 表示式樹

2021-10-03 12:43:41 字數 1217 閱讀 8849

題目:給出乙個由數字及』+』,』-』,『x』,』/』 以及括號組成的合法算式,將其轉化為表示式樹。

表示式樹的所有樹葉都是運算元,非葉子節點都是運算子。由於給出的運算子都是二元運算子,因此這道題得到的樹一定是二叉樹。可以先尋找「最後計算的運算子」,將這個運算子作為乙個結點,然後遞迴計算運算子左右兩個算式,計算結果作為該節點的左右兒子。

直接上**,需要注意的問題都寫在注釋裡。

#include

#include

#include

#include

using

namespace std;

string input;

struct node //定義樹的結點型別

;node* build_tree (

int x,

int y)

//將[x,y]部分表示式轉化成表示式樹,並返回根}if

(c1 <

0) c1 = c2;

//沒有找到加號減號,使用乘號或除號

if(c1 <0)

//括號外的運算子都沒有,分兩種情況:

root -

> num = cur_num;

return root;

} root -

> op = input[c1]

; root -

> left = build_tree (x, c1 -1)

;//遞迴計算左側表示式

root -

> right = build_tree (c1 +

1, y)

;//遞迴計算右側表示式

return root;

}void print_tree (node* root,

int indent)

//indent表示縮排空格數目,每個節點比它的兒子節點少縮排4個空格。inorder。

int main (

)

輸入"1+(2+3) * 4"

結果:

輸入"12-(1+5) * 6+500/(2+3)-4 * 5 * 6"

結果:

演算法競賽入門經典第3章習題

給出乙個有o和x組成的串 長度為1 80 統計得分。每個o的得分為目前連續出現的o的個數,x的得分為0。例如,ooxxoxxooo的得分是為1 2 0 0 1 0 0 1 2 3。按照題目說的做就行了,超簡單。include include define maxn 80 char s maxn in...

演算法競賽入門經典(第2版)例題(第3章)

例題 3 1 tex中的引號 tex quotes include intmain else printf c c return0 例題 3 2 wertyu include char s 1234567890 qwertyuiop asdfghjkl zxcvbnm,int main 例題 3 3...

第5章 表示式

不想從第一章開始看起,看目錄覺得對第五章中的bitset和sizeof有點興趣,嗯,研究一下。1 if ival ival作為乙個條件表示式,非0時,if條件成立。表示式結果是右值,可讀取結果,不能對它進行賦值。2 短路求值 邏輯與和邏輯或總先計算左運算元。且只在左運算元無法確定結果時,才會求解右運...