DS樹 帶權路徑和

2021-10-10 06:59:56 字數 1584 閱讀 4338

題目描述計算一棵二叉樹的帶權路徑總和,即求赫夫曼樹的帶權路徑和。

已知一棵二叉樹的葉子權值,該二叉樹的帶權案路徑和apl等於葉子權值乘於根節點到葉子的分支數,然後求總和。如下圖中,葉子都用大寫字母表示,權值對應為:a-7,b-6,c-2,d-3

樹的帶權路徑和 = 71 + 62 + 23 + 33 = 34

本題二叉樹的建立參考前面的方法

輸入

第一行輸入乙個整數t,表示有t個二叉樹

第二行輸入一棵二叉樹的先序遍歷結果,空樹用字元『0』表示,注意輸入全是英文本母和0,其中大寫字母表示葉子

第三行先輸入n表示有n個葉子,接著輸入n個資料表示n個葉子的權值,權值的順序和前面輸入的大寫字母順序對應

以此類推輸入下一棵二叉樹

輸出

輸出每一棵二叉樹的帶權路徑和

樣例輸入

2xa00tb00zc00d00

4 7 6 2 3

ab0c00d00

2 10 20

樣例輸出

3440

本題使用了《廣度優先搜尋方法》,而不是遞迴,解題思路是判斷每一層的結點是否為葉子結點,如果為葉子結點,根據層數相乘加到總和sum,最後返回sum

#include

#include

using

namespace std;

class

node

node()

~node()

if(rchild !=

null)}

};class

binarytree

~binarytree()

};void

build

(node *

&tree)

if(c !=

'0')

}void

input

(node *

&node)

input

(node-

>lchild)

;input

(node-

>rchild);}

intsum_road

(node *node)

if(temp-

>lchild ==

null

&& temp-

>rchild ==

null

) que.

push

(temp-

>lchild)

; que.

push

(temp-

>rchild);}

}return sum;

}int

main()

return0;

}

DS樹 帶權路徑和

題目描述 計算一棵二叉樹的帶權路徑總和,即求赫夫曼樹的帶權路徑和。已知一棵二叉樹的葉子權值,該二叉樹的帶權案路徑和apl等於葉子權值乘於根節點到葉子的分支數,然後求總和。如下圖中,葉子都用大寫字母表示,權值對應為 a 7,b 6,c 2,d 3 樹的帶權路徑和 71 62 23 33 34 本題二叉...

Huffman樹的帶權路徑長度

題目描述 給定n個權值 權值均是大於0的正整數 構造赫夫曼樹ht,並求出赫夫曼樹ht的帶權路徑長度。注意 構造赫夫曼樹ht時,在將2棵二叉樹合併成一棵新的二叉樹時,將根結點權值小的用作左子樹!輸入先輸入權值的個數n n 1 然後依次輸入n個權值 權值均是大於0的正整數 輸出輸出構造的赫夫曼樹ht的帶...

哈夫曼樹 哈夫曼樹求帶權路徑和

首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...