題目描述計算一棵二叉樹的帶權路徑總和,即求赫夫曼樹的帶權路徑和。已知一棵二叉樹的葉子權值,該二叉樹的帶權案路徑和apl等於葉子權值乘於根節點到葉子的分支數,然後求總和。如下圖中,葉子都用大寫字母表示,權值對應為:a-7,b-6,c-2,d-3
樹的帶權路徑和 = 71 + 62 + 23 + 33 = 34
本題二叉樹的建立參考前面的方法本題使用了《廣度優先搜尋方法》,而不是遞迴,解題思路是判斷每一層的結點是否為葉子結點,如果為葉子結點,根據層數相乘加到總和sum,最後返回sum輸入
第一行輸入乙個整數t,表示有t個二叉樹
第二行輸入一棵二叉樹的先序遍歷結果,空樹用字元『0』表示,注意輸入全是英文本母和0,其中大寫字母表示葉子
第三行先輸入n表示有n個葉子,接著輸入n個資料表示n個葉子的權值,權值的順序和前面輸入的大寫字母順序對應
以此類推輸入下一棵二叉樹
輸出
輸出每一棵二叉樹的帶權路徑和
樣例輸入
2xa00tb00zc00d00
4 7 6 2 3
ab0c00d00
2 10 20
樣例輸出
3440
#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的帶...
哈夫曼樹 哈夫曼樹求帶權路徑和
首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...