100 likes | 274 Views
哈夫曼树. 前言. 二叉树中各结点处在不同层次上,每个叶结点到根结点有不同的路径长度(等于层次数减 1 ) 如果我们把叶结点到根结点的路径长度之和定义成树的路径长度的话,在几个结点数相同的二叉树中,完全二叉树的路径最短. 带权二叉树. 在前面的使用中,二叉树的结点都用字母代号表示。但是在处理具体问题时,我们经常需要结点能附带信息。如给树叶结点赋上某个实数值。那么这个实数值就称为该结点的权,该二叉树称为 带权二叉树 。. 二叉树的带权路径长度.
E N D
前言 • 二叉树中各结点处在不同层次上,每个叶结点到根结点有不同的路径长度(等于层次数减1) • 如果我们把叶结点到根结点的路径长度之和定义成树的路径长度的话,在几个结点数相同的二叉树中,完全二叉树的路径最短
带权二叉树 • 在前面的使用中,二叉树的结点都用字母代号表示。但是在处理具体问题时,我们经常需要结点能附带信息。如给树叶结点赋上某个实数值。那么这个实数值就称为该结点的权,该二叉树称为带权二叉树。
二叉树的带权路径长度 • 定义为所有叶结点的权与它到根结点路径长度的乘积之和。假设一二叉树有n个叶结点,用ki表示叶结点,li表示到根结点的路径长度,wi表示ki的权,那么树的带权路径长度(wpl)有公式: wpl=∑ wi* li (1≤i≤n) 当wi =1时,显然,树的带权路径长度就是树的路径长度。如果wi≠ 1,带权路径长度最小的是完全二叉树。
2 7 5 2 4 4 (a) 7 5 (b) 7 5 2 4 (c)
三个图的WPL • WPL=7*2+5*2+2*2+4*2=36 • WPL=7*3+5*3+4*2+2*1=46 • WPL=7*1+5*2+4*3+2*3=35
哈夫曼树 • 使二叉树带权路径长度取最小值的树称为哈夫曼树或最优二叉树。
哈夫曼树的构建 • 由wpl定义可知,叶结点的权越大,应放置在离根结点越近的位置,才能构建哈夫曼树。因此,构建哈夫曼树的思路应该是由叶结点逐次合并成二叉树。先合并权最小的两个结点成一体,并得新权,再合并权最小的两个结点,……,以此类推,一直到所有结点无被合并。
5 7 6 2 4 5 7 2 4 18 7 11 7 11 5 6 5 6 2 4 2 4
补充 • 由于二叉树结点总数为:M=N0+N1+N2(N0、N1、N2分别表示度为0、1、2的结点)。而二叉树中的结点,除根结点外,其他结点一定是子女结点,所以,二叉树结点总数又可写成M=N1+2N2+1(所有度为1的结点子女+所有度为2的结点子女+根)。由此,得出结论:N0=N2+1。 • 而在构建哈夫曼树的过程中。我们发现没有度为1的结点,得出结论:M=2N0-1。