感覺樹的內容很難,一些邏輯比較難弄懂,而且內容比較多,所以還是得花時間去理解,樹不比先前的那些線性結構,多了很多新東西,比如帶權路徑長度,哈弗曼編碼什麼的,總之要學起來真的不容易。
//觀察表示式樹會發現數字字元的左孩子右孩子都是空的用於後面的表示式樹的運算
//建立兩個棧乙個是樹節點的儲存型別乙個是字元儲存棧
for(int i=0;str[i];i++)
else
if(字元棧棧頂優先順序大於str[i])
else
}計算表示式
定義變數str和bt,輸入str利用函式btree createbtree(
string str , int
n )構造樹
利用函式void sum(btree bt,
int &wpl,int
h)計算葉子節點的帶權路徑長度和
利用函式btnode build(int *in,int *post,intn)後序中序構造二叉樹的函式
給出n個權值,構造出有n個葉子結點的哈夫曼樹。
假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:
(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有乙個結點);
(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;
(3)從森林中刪除選取的兩棵樹,並將新樹加入森林;
(4)重複(2)、(3)步,直到森林中只剩一棵樹為止,該樹即為所求得的哈夫曼樹。
構建哈夫曼樹,書本上寫的是利用ht陣列來記錄節點的孩子和雙親,而這篇**直接構造了一棵鏈式儲存的哈夫曼樹,對於7-7的修理牧場來說,只需先構建乙個哈夫曼樹,在把不是葉子節點的節點data加起來就是題目的答案,思路簡單。
DS部落格作業05 樹
通過這次對樹的學習,這是第一次學習非線性結構的資料結構,之前都是學線性的,感覺有點不習慣,做題之後 感覺線性和非線性的區別也就是遍歷的方法不一樣,以前線性結構遍歷都是用迴圈,到了非線性結構遍歷則都是 用遞迴。樹結構我覺得就分為兩種多叉樹和二叉樹,二叉樹結構體都是用左右孩子,而多叉樹結構體都是孩子和 ...
DS部落格作業05 樹
說明 由於在日常提交列表中除錯過程以及碰到的問題不太明顯,所以將上機考試中的困難點列出輸入一行中綴表示式,轉換一顆二叉表示式樹,並求解.建立二叉表示式樹 建立字元棧op 樹根棧tree op.push 遍歷 str i if 是數字 依次存入樹根棧內 if 是符號 判斷 str i 與 op棧頂的優...
DS部落格作業05 樹
這一段時間學了樹 二叉樹 感覺樹的內容很難,內容比較難弄懂,所以還是得花時間去理解,總之要學起來真的不容易。在老師的課上跟著老師走對於樹概念和一些操作有了一定的理解 實際上理解透的卻沒有 自己下來實操 還是對於我來說有點難不會做。樹有二叉樹,哈夫曼樹等等的特殊結構的樹,遍歷的方式也是多種多樣 中序遍...