第十一周專案2 用二叉樹求解代數式

2021-07-24 20:43:35 字數 1883 閱讀 6991

/* 

檔名稱:專案2.cbp

作 者:天意

完成日期:2023年11月24日

版 本 號:v1.0

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

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

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

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

輸入描述:無

程式輸出:測試資料

*/

**:

//標頭檔案  

#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節點的右孩子節點指標

int btnodedepth(btnode *b); //求二叉樹b的深度

void dispbtnode(btnode *b); //以括號表示法輸出二叉樹

void destroybtnode(btnode *&b); //銷毀二叉樹

原始檔:

#include #include #include "btree.h"  

void createbtnode(btnode *&b,char *str) //由str串建立二叉鏈

} }

j++;

ch=str[j];

} } btnode *findnode(btnode *b,elemtype x) //返回data域為x的節點指標

} btnode *lchildnode(btnode *p) //返回*p節點的左孩子節點指標

btnode *rchildnode(btnode *p) //返回*p節點的右孩子節點指標

int btnodedepth(btnode *b) //求二叉樹b的深度

} void dispbtnode(btnode *b) //以括號表示法輸出二叉樹

} } void destroybtnode(btnode *&b) //銷毀二叉樹

}

//主函式  

#include #include "btree.h"

int main()

else

printf(" 未找到!");

printf("\n");

printf(" (4)二叉樹b的深度:%d\n",btnodedepth(b));

printf(" (5)釋放二叉樹b\n");

destroybtnode(b);

return 0;

}

執行結果:

第十一周 專案2 用二叉樹求解代數式

標頭檔案 define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 btnode findnode btnode b,elemt...

第十一周上機實踐 專案2 用二叉樹求解代數表示式

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

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

檔名稱 main.cpp,btree.h,btree.cpp 完成日期 2015年11月5日 版本號 code block 12.11 問題描述 用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數 為簡化,只支援二目運算的 不加括號,運算數也只是一位的數字字元。...