問題及**
/*
* 檔名稱:專案2.cpp
* 作 者:陳迪
* 完成日期:2023年11月9日
* 版 本 號:v1.0
*問題描述:用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,
每乙個葉子節點代表乙個運算數(為簡化,只支援二目運算的+、-、*、/,
不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況)。
請設計演算法,(1)根據形如「1+2∗3−4/5」的字串代表的表示式,構造出對應的二叉樹(如圖),
用後序遍歷的思路計算表示式的值時,能體現出先乘除後加減的規則;(2)對構造出的二叉樹,
計算出表示式的值。
*輸入描述:無
*程式輸出:測試資料
*/
標頭檔案brtee以及函式功能詳見
二叉樹演算法庫
#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)
}
int main()
執行結果
知識點總結
用二叉樹解決實際問題。
第十一周 專案2 用二叉樹求解代數式
標頭檔案 define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 btnode findnode btnode b,elemt...
第十一周專案2 用二叉樹求解代數式
檔名稱 專案2.cbp 作 者 天意 完成日期 2016年11月24日 版 本 號 v1.0 問題描述 用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數 為簡化,只支援二目運算 的 不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況 請設...
第十一周上機實踐 專案2 用二叉樹求解代數表示式
檔名稱 test.cpp 完成日期 2015年11月13日 版本 v1.0 問題描述 用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數 為簡化,只支援二 目運算的 不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況 請設計演算法,1 根 ...