//vectorv,存樹
//中序遍歷:可以設乙個flag,根符號不需要括號,剩下的輸出括號
//最後乙個測試點沒過!!!???
/*#include#define maxn 25
using namespace std;
struct nodev[maxn];
int flag[maxn]; //目的:找到根節點
int root;
void inorder(int now)
inorder(v[now].left);
cout << v[now].data;
inorder(v[now].right);
if( now != root &&(v[now].data == "*" || v[now].data == "-" || v[now].data == "+" || v[now].data == "%"))
cout << ")";
}int main()
if(v[i].right!=-1)
}int i;
for(i = 1; i <= n; i++)
if(!flag[i]) break;
root = i;
inorder(i);
return 0;
}*/
修改後思路://改正:最外層可能會被括號包起來,也可能不被包起來————>因為不知道根節點或近鄰節點那種情況(底層根是不是符號————即加沒加括號),最後判斷即可
//遞迴的真實徹底理解————————>中序遍歷,
//如果當前根不是數字而是運算子,就加括號,最後再總判斷去除多餘的外括號即可。
#include
#define maxn 25
using
namespace std;
struct nodev[maxn]
;int flag[maxn]
;//目的:找到根節點
int root;
string inorder
(int now)
intmain()
if(v[i]
.right!=-1
)}int i;
for(i =
1; i <= n; i++)if
(!flag[i]
)break
; root = i;
string ans =
inorder
(i);
if(ans[0]
=='('
) ans = ans.
substr(1
, ans.
size()
-2);
cout << ans;
return0;
}
中綴表示式
實現 直接計算中綴表示式 不含括號 include include includeusing namespace std 運算符號優先順序比較 加減為低階運算,乘除是高階運算 先算乘除 return 1 means can calculate,else can not.int getpriority...
中綴表示式
輸入乙個中綴表示式 由 0 9組成的運算數 加 減 乘 除 四種運算子 左右小括號組成。注意 也可作為負數的標誌,表示式以 作為結束符 判斷表示式是否合法,如果不合法,請輸出 no 否則請把表示式轉換成字尾形式,再求出字尾表示式的值並輸出。注意 必須用棧操作,不能直接輸出表示式的值。輸入格式 第一行...
中綴表示式 字尾表示式
中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...