/*
* 檔名稱:wu.cpp
* 作 者:武昊
* 完成日期:2023年11月10日
* 版 本 號:v1.0
*問題描述:用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,
每乙個葉子節點代表乙個運算數(為簡化,只支援二目運算的+、-、*、/,
不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況)。
請設計演算法,(1)根據形如「1+2∗3−4/5」的字串代表的表示式,構造出對應的二叉樹(如圖),
用後序遍歷的思路計算表示式的值時,能體現出先乘除後加減的規則;(2)對構造出的二叉樹,
計算出表示式的值。
*輸入描述:無
*程式輸出:測試資料
*/btree.h**:
#include
#include
#define maxsize 100
typedef
char
elemtype;
typedef
struct
node
btnode;
void
createbtnode(btnode *&b,
char
*str);
//由str串建立二叉鏈
btnode *findnode(btnode *b,elemtype x); //返回data域為x的節點指標
btnode *lchildnode(btnode *p); //返回*p節點的左孩子節點指標
btnode *rchildnode(btnode *p); //返回*p節點的右孩子節點指標
intbtnodedepth(btnode *b);
//求二叉樹b的深度
void
dispbtnode(btnode *b);
//以括號表示法輸出二叉樹
void
destroybtnode(btnode *&b);
//銷毀二叉樹
**:#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
第十一周 專案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 根 ...