第十一周專案2 二叉樹的鏈式儲存及基本運算

2021-07-07 05:48:12 字數 2045 閱讀 1534

問題及**:

/* 

*檔名稱:二叉樹的鏈式儲存及基本運算.cpp

*作 者:杜文文

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

*問題描述:用二叉樹來表示代數表示式,樹的每乙個分支節點代表乙個運算子,

每乙個葉子節點代表乙個運算數(為簡化,只支援二目運算的+、-、

*、/,不加括號,運算數也只是一位的數字字元。本專案只考慮輸入

合乎以上規則的情況)。

請設計演算法:(1)根據形如「1+2?3?4/5 」的字串代表的表示式,

構造出對應的二叉樹(如圖),用後序遍歷的思路計算表

達式的值時,能體現出先乘除後加減的規則;

(2)對構造出的二叉樹,計算出表示式的值。

在main函式中,建立的用於測試的二叉樹如下——

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

#endif // btree_h_included

#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 二叉樹的構造

問題及 all right reserved.檔名稱 二叉樹的構造.cpp 完成日期 2015年11月9日 版本號 v1.0 問題描述 由先序序列和中序序列構造二叉樹 由中序序列和後序序列構造二叉樹 輸入描述 各個序列元素排列 程式輸出 二叉樹的構造 include include btree.h ...

第十一周專案一(2) 二叉樹構造

問題及 all right reserved.檔名稱 二叉樹的構造.cpp 完成日期 2015年11月9日 版本號 v1.0 問題描述 由先序序列和中序序列構造二叉樹 由中序序列和後序序列構造二叉樹 輸入描述 各個序列元素排列 程式輸出 二叉樹的構造 include include btree.h ...

第十一周 專案一(2) 二叉樹的構造

完成時間 2015年11月17號 題目描述 學會使用線序序列和中序序列構造二叉樹 1 演算法庫中標頭檔案部分 ifndef btree h included define btree h included define maxsize 100 typedef char elemtype typede...