ACM新手DAY 9 二叉樹 哈弗曼樹 字典樹

2021-09-25 12:28:42 字數 1675 閱讀 1964

題目:給乙個二叉樹的前序遍歷和中序遍歷,求出它的後序遍歷。

#include

#include

using namespace std;

string str1, str2;

string find

(int begin1,

int begin2,

int len)

//子樹的前序遍歷和中序遍歷的長度一樣,所以左子樹的長度就是i-begin2

string str1l =

find

(begin1+

1, begin2, i - begin2)

; string str1r =

find

(begin1+1+

(i - begin2)

, i+

1, len-

(i - begin2)-1

);return str1l + str1r + str1[begin1]

;//這個東西就是post_order(str1, str2)=post_order(str1l, str2l)+post_order(str1r, str2r)+root

}int

main()

題目:一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從上到下從左到右編號為1,2

,⋅⋅⋅

2d−1

1,2,···2^d-1

1,2,⋅⋅

⋅2d−

1。在結點1放乙個小球,它會下落。每個內結點上有乙個開關,每當有小球落上去,開關狀態都會改變。當小球到達乙個結點時,若這個結點的開關關閉,則往左走,否則往右走,直到走到葉子結點。一些小球從結點1依次開始下落,最後乙個小球將會落到**?

#include

#include

using namespace std;

intmain()

else

}printf

("%d\n"

,ans);}

}return0;

}

#include

typedef

long

long ll;

const

int inf =

1<<30;

const

int maxn =2*

1e5+10;

using namespace std;

struct trie_node

;trie_node*

creat_node()

///建立乙個新結點並初始化

void

insert_node

(trie_node *root, string key)

}int

search_trie

(trie_node *root, string key)

return node->cnt;

///返回計數字

}int

main()

cin >>m;

for(

int i=

0; i)return0;

}

二叉樹演算法三之哈弗曼樹和編碼

這一節介紹哈夫曼樹和哈弗曼編碼,其中構造哈弗曼樹的步驟如下 1.根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹ti 中只有乙個帶權為wi 根結點,其左右子樹均為空。2.在f中選取兩棵根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為其左右子樹上根結點的權值之...

基礎知識 二叉樹 廣義表 哈弗曼編碼

二叉樹性質 1.第i層最多有2 i 1 個結點 2.深度為k的二叉樹最多有2 k 1個結點 3.度為0 葉子結點 的結點比度為2的結點多1 4.總結點數 總邊數 1 可用來表示二叉樹.表示形式如下 廣義表建立二叉樹 結構定義 以括號為分割點來區分左右子樹 開始壓棧標誌 是彈出棧標誌 typedef ...

哈夫曼樹(最優二叉樹)

給定n個權值作為n的 葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小 所謂樹的帶權路徑長度,就是樹中所有的葉結點 的權值乘上其到根結點的路徑長度 稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。假設有n個權值,則構造出的...