算術表示式轉化為二叉運算樹

2021-10-02 03:50:20 字數 1340 閱讀 5403

二叉運算樹的實質是不僅記錄了表示式而且記錄了表示式的運算順序,運算時直接後序遍歷就行了(注意:是後序遍歷求值,中序遍歷只能列印出表示式)

核心思路:二元表示式由三部分構成: 數 + 運算子 + 數,(數也可以是表示式)在乙個表示式中是否能計算其中的單個二元表示式,只取決於此運算子與其前後運算子的優先順序,如:3+25,不能計算3+2,因為優先順序高於+,應該先計算2*5,在計算+號

注意: 測試**必需以#結束,如:2*3+5/(4+1)#

#include

#include

#include

#define maxnum 50

using namespace std;

typedef

struct tree

btree;

char optr[maxnum]

;//儲存運算子

int top =-1

;btree* expt[maxnum]

;//儲存根節點

int top1 =-1

;char

judge

(char s,

char c)

//判斷棧頂元素和ch的優先順序

else

if(c ==

'(')

return

'>'

;else

if(c ==

')')

else

if(s ==

'#'|| s ==

'(')

//此處的c必定是+-*/

return

'>'

;else

if(c ==

'*'|| c ==

'/')

else

return

'<';}

void

creat

(char ch)

//核心:判斷運算子的優先順序

void

creat_btree()

else}}

}void

middle_order

(btree*

&h)//中序遍歷列印陣列

}int

computer

(char ch,

int a,

int b)

return r;

}int

behind_order

(btree*

&h)//後序遍歷 求值

else

}int

main()

樹轉化為二叉樹 森林轉化為二叉樹(詳解版)

前面介紹了普通樹轉化為二叉樹的孩子兄弟表示法,本節來學習如何將森林轉化為一整棵二叉樹。森林,指的是由 n n 2 棵互不相交的樹組成的集合,如圖 1 所示。在某些實際場景中,為了便於操作具有森林結構的資料,往往需要將森林轉化為一整棵二叉樹。我們知道,任意一棵普通樹都可以轉化為二叉樹,而森林是由多棵普...

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

注意 中綴表示式需要空格隔開運算元或者操作符 關鍵有 判斷是否操作符,操作符優先順序 public class profixexpression 計算排好的字尾操作計算式 param prostr return public static intprofixcalculate string pros...

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

中綴表示式轉化為字尾表示式有兩種方法,一種是利用棧,一種是把表示式轉化為樹再進一步求解,今天我們來深入了解一下這兩種方法 給出下面乙個例子 我們把中綴表示式 9 3 1 3 10 2 轉化為字尾表示式 1.首先初始化乙個空棧,用來對符號進出棧使用 2.第乙個字元是數字9,輸出9,將後面的符號 進棧 ...