第十一周 資料結構 用二叉樹求解代數表示式

2021-07-07 09:47:31 字數 1482 閱讀 2320

/*

*第十一周--資料結構--用二叉樹求解代數表示式

#include #include #include #include #define maxsize 100

typedef char elemtype;

typedef struct node

btnode;

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

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

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

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

double comp(btnode *b);

btnode *crtree(char s,int i,int j);

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()

第十一周 資料結構 二叉樹的構造

第十周 資料結構 二叉樹演算法庫 all right reserved.檔名稱 tree.cpp writer 羅海員 date 2015年11月22日 問題描述 由先序序列和中序序列構造二叉樹 由先序序列和中序序列可以唯一確定後序序列 同時,由中序序列和後序序列唯一可以確定先序序列 define ...

第十一周 資料結構 線索化二叉樹 中序

第十周 資料結構 all right reserved.檔名稱 tree.cpp writer 羅海員 date 2015年11月22日 問題描述 中序線索化二叉樹的演算法驗證 include include define maxsize 100 typedef char elemtype type...

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

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