實驗目的:
1、熟練掌握二叉樹的二叉鍊錶表示方法及二叉樹遍歷演算法
2、根據哈夫曼演算法建立哈夫曼樹
涉及的知識點:
二叉樹的表示法、二叉樹遍歷演算法的設計
實驗內容:
1、設計乙個程式,根據二叉樹的先根序列和中根序列建立一棵用左右指標表示的二叉樹
例如:先根序列為 abdgcef#, 中根序列為 dgbaecf# (#表示結束)。然後用程式構造一棵二叉樹。注意程式的通用性(也就是說上述只是乙個例子,你的程式要接受兩個序列(先根和中根序列),然後構造相應的二叉樹)。
2. 設計乙個程式,把中綴表示式轉換成一棵二叉樹,然後通過後序遍歷計算表示式的值
例如:中綴表示式為(a+b)*(c+d)# (#表示結束),將之轉換成一棵二叉樹,然後通過後序遍歷計算表示式的值,其中abcd都是確定的值。注意程式的通用性(也就是說上述只是乙個例子,你的程式要接受乙個序列,然後構造相應的二叉樹,最後通過後序遍歷計算出值(注意不是根據中綴表示式計算出值,而是通過後序遍歷所構造出的二叉樹計算出值))。
main.cpp
#include"st.h"
void main()
*bitree;
typedef bitree selemtype;
typedef struct node
*stack;
bool initstack(stack &s);
bool stackempty(stack s);
int stacklength(stack s);
bool push(stack &s, selemtype e);
bool pop(stack &s, selemtype &e);
bool gettop(stack s, selemtype &e);
void preshow(bitree &t);
bitnode* createbitree(string pre, string in);
bool in(char ch);
bitree createexptree( btelemtype a, bitree l, bitree r);
char precede(char optrtop, char ch);
bitree initexptree();
int getvalue(char ch, int a, int b);
int evaluateexptree(bitree t);
st.cpp
#include"st.h"
bool initstack(stack &s)
bool stackempty(stack s)
int stacklength(stack s)
bool push(stack &s, selemtype e)
bool pop(stack &s, selemtype &e)
bool gettop(stack s, selemtype &e)
//根據先序pre和中序in序列生成二叉樹bitnode*
bitnode* createbitree(string pre, string in)
else if (in[i] != pre[0]) }
//根據左子樹的長度將先序序列分為左子樹和右子數
//主意 從i=1開始 因為先序遍歷的第乙個是根
for (i = 1; i < n; i++)
else }
node->lchild = createbitree(lpre, lin);//遞迴建立
node->rchild = createbitree(rpre, rin);
return node;//判斷ch是否是運算子
bool in(char ch)
} else if (ch == '(')
return '<';
else if (ch == ')')
else if (ch == '#')
return '>';
}//表示式樹bitree建立
bitree initexptree()
if (in(s[i]))//s[i]是運算子
if (stackempty(optr))//s[i]是運算子,運算子棧空
else//運算子棧非空
}s2.clear();//清空s2 }}
bitree t;
pop(expt, t);
return t;//根據運算子ch,左運算元a,右運算元b進行運算
int getvalue(char ch, int a, int b)
else
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...