數算A 表示式 表示式樹 表示式求值

2022-08-29 17:54:09 字數 1647 閱讀 9390

這道題在輸出上太坑了,畫出來不像樹...

1 #include2 #include3 #include4

using

namespace

std;

5int val[26

],n,len,ans,maxdep;

6char infix[55],postfix[55],out[50][300];7

struct

node

13 }*root;

14//

計算a^b

15int pow(int a,int

b)21

//將中綴轉化為字尾表示式

22void infixtopost(char *s)

34if(!s.empty()) s.pop();35}

36else

41s.push(s[j]);42}

43}44while(!s.empty())

48 postfix[i]=0

;49 len=i; //

把len設定為postfix的長度 50}

51//

根據建的樹求值

52int cal(node *cur)61}

62}63//

找到樹的高度

64int finddep(node *cur)

70//

將要列印的內容輸出到out中

71void print(node *cur,int x,int y,int

space)

77if(cur->r)81}

82//

列印樹

83void

printtree()91}

92//

建樹 93

void

build()

102s.push(t);

103}

104 root=s.top();s.pop();

105}

106int

main()

107116 infixtopost(infix); //

中綴轉字尾

117 cout118 build(); //

根據字尾建樹

119 ans=cal(root); //

計算值

120 maxdep=finddep(root); //

得到最大深度

121 memset(out,'

',sizeof(out

));122

//注意到根結點一定是在第一行的2^(maxdep-1)-1的下標位置(別問為什麼,因為你看輸出出來就是這麼詭異),

123//

也就是位於中間的位置,再根據當前層數判斷葉子結點放的位置(print函式中)

124int y=pow(2,maxdep-1)-1; //

根結點在y上的座標

125 print(root,0,y,y+1>>1); //

形成樹形圖

126printtree();

127 cout<128 }

表示式 表示式樹 表示式求值

總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...

表示式求值問題之表示式樹

include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...

表示式求值與字尾表示式

乙個算術表示式,含有數字 為簡化處理,數字只有一位 運算子 以及括號,求表示式的值。給出的表示式是一般我們見到的中綴表示式,即運算子位於運算元之間。如果把中綴表示式轉化為字尾表示式,那麼對字尾表示式求值將會很方便。字尾表示式特點 1.操作符位於運算元之後 2.沒有括號 3.運算子沒有優先順序。中綴表...