第11周專案2 用二叉樹求解代數表示式

2021-07-24 12:16:34 字數 1214 閱讀 8751

檔名稱:專案2.cbp

作 者:王婧

完成日期:2023年11月10日

版 本 號:v1.0

問題描述:用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數(為簡化,只支援二目運算

的+、-、*、/,不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況)。請設計演算法,(1)根據形

如「1+2*3−4/5」的字串代表的表示式,構造出對應的二叉樹(如圖),用後序遍歷的思路計算表示式的值時,能體現出先乘除後

加減的規則;(2)對構造出的二叉樹,計算出表示式的值。

輸入描述:無

程式輸出:測試資料

標頭檔案及功能函式詳見

【二叉樹

演算法庫】

main.cpp檔案**

#include 

#include "btree.h"

//用s[i]到s[j]之間的字串,構造二叉樹的表示形式

btnode *crtree(char

s,int

i,int

j)  

//以下為i!=j的情況

for(k=i; k<=j; k++)  

if(s[k]==

'+'|| s[k]==

'-')  

if(plus==0)                 

//沒有+或-的情況(因為若有+、-,前面必會執行plus++)

for(k=i; k<=j; k++)  

if(s[k]==

'*'|| s[k]==

'/')  

//以上的處理考慮了優先將+、-放到二叉樹較高的層次上

//由於將來計算時,運用的是後序遍歷的思路

//處於較低層的乘除會優先運算

//從而體現了「先乘除後加減」的運算法則

//建立乙個分支節點,用檢測到的運算子作為節點值

if(plus!=0)  

else

//若沒有任何運算子,返回null

return

null;  

}  double

comp(btnode *b)  

}  intmain()    

執行結果:

第11周 專案2 用二叉樹求解代數表示式

void createbtnode btnode b,char str 由str串建立二叉鏈 btnode findnode btnode b,elemtype x 返回data域為x的節點指標 btnode lchildnode btnode p 返回 p節點的左孩子節點指標 btnode rch...

第11周專案2用二叉樹求解代數表示式

問題及 btree演算法庫 檔名稱 專案2.cpp 完成日期 2015.11.23 問題描述 用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數 為簡化,只支援二目運算的 不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況 請設計演算法,1...

第11周專案2用二叉樹求解代數表示式

函式 include include include include 1.h 用s i 到s j 之間的字串,構造二叉樹的表示形式 btnode crtree char s,int i,int j 以下為i j的情況 for k i k j k if s k s k if plus 0 沒有 或 的...