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

2021-07-24 09:39:29 字數 2339 閱讀 7439

問題描述及**:

/*     

*煙台大學計算機與控制工程學院      

*作    者:張雯婧  

*完成日期:2023年11月6日  

*問題描述:用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,每乙個葉子節點代表乙個運算數(為簡化,只支援二目運算的+、-、*、/,不加括號,運算數也只是一位的數字字元。本專案只考慮輸入合乎以上規則的情況)。請設計演算法,(1)根據形如「1+2?3?4/5」的字串代表的表示式,構造出對應的二叉樹(如圖),用後序遍歷的思路計算表示式的值時,能體現出先乘除後加減的規則;(2)對構造出的二叉樹,計算出表示式的值。 

*/

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

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

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

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

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)   //銷毀二叉樹    

}    

//用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 根 ...