樹 中綴表示式 DFS 技巧操作 PAT1130

2021-10-01 02:51:32 字數 1423 閱讀 7222

//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...