題目:給出乙個由數字及』+』,』-』,『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 短路求值 邏輯與和邏輯或總先計算左運算元。且只在左運算元無法確定結果時,才會求解右運...