用二叉查找树的方法画哈夫曼树,对么?

作者&投稿:黄念 (若有异议请与网页底部的电邮联系)
~
权值w={5,29,7,8,14,23,3,11},画出哈夫曼树.

个人认为, 图2的画法有不妥的地方.

问题点就是:
结点3和结点5组成新结点N8,那么新结点N8应该排在原有结点8的后面,还是前面?

个人认为,应该按照图1的做法,将新结点N8排在原有结点8的后面.

分析过程如下:

八个权值从小到大排序是: 3 5 7 8 11 14 23 29

图1 : 哈夫曼树

         N100
      /        \
    N42        N58
   /  \       /  \
  23  N19    29  N29
     /  \       /  \
   11   N8     14  N15
       /  \       /  \
      3    5     7    8

根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点3的路径长度是4,结点3的带权路径长度是3*4
如此类推,哈夫曼树的带权路径长度(WPL)等于
29*2 + 23*2 + 14*3 + 11*3 + 8*4 + 7*4 + 5*4 + 3*4 = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
权值29: 10
权值23: 00
权值14: 110
权值11: 010
权值8 : 1111
权值7 : 1110
权值5 : 0111
权值3 : 0110


图2 : 哈夫曼树

             N100
         /          \
        N58        N42
       /   \      /   \
      N29  29    N19  23
     /  \       /  \
   14   N15    8   11
       /  \
      7   N8
         /  \
        3    5

根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点3的路径长度是5,结点3的带权路径长度是3*5
如此类推,哈夫曼树的带权路径长度(WPL)等于
29*2 +23*2 +14*3 +11*3 +8*3 +7*4 +5*5 +3*5  = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
权值29: 01
权值23: 11
权值14: 000
权值11: 101
权值8 : 100
权值7 : 0010
权值5 : 00111
权值3 : 00110


从 WPL 的角度看,图1和图2的WPL都是等于271.

从 哈夫曼编码 的角度看:
图1, 权值29的编码是10, 权值3的编码是0110 
图2, 权值29的编码是01, 权值3的编码是00110

图2的权值29和权值3的编码长度相差大了一点.

相比下,图1的方案更加合适,所以优先选择图1的哈夫曼树.

图1和图2出现编码差异大的主要原因是:
结点3和结点5组成新结点N8,那么新结点N8应该排在原有结点8的后面,还是前面?
图1的做法是将新结点N8排在原有结点8的后面,所以结点7与原有结点8先合并.
而图2的做法是新结点将N8排在原有结点8的前面,所以结点7和新结点N8先合并了.

个人认为,应该按照图1的做法,将新结点N8排在原有结点8的后面.

另外,个人认为,图1的结点11和N8的左右位置互换一下,结点23和N19左右位置互换一下,
这样会更加合适,保证从左到右,结点是从小到大,让最后编码的时候,更加统一.


以下是详细的构建过程:

(1) 从小到大排序 3 5 7 8 11 14 23 29 (这是有序序列)
(2) 每次提取最小的两个结点,取结点3和结点5,组成新结点N8,其权值=3+5=8,
    取数值较小的结点作为左分支,结点3作为左分支,而结点5就作为右分支.
(3) 将新结点N8放入有序序列,保持从小到大排序:
    7 8 N8 11 14 23 29  [注意,新结点N8排在原结点8的后面]
(4) 重复步骤(2),提取最小的两个结点,结点7与结点8组成新结点N15,其权值=7+8=15,
    结点7的数值较小,将结点7作为左分支,结点8就作为右分支.
(5) 将新结点N15放入有序序列,保持从小到大排序:
    N8 11 14 N15 23 29
(6) 重复步骤(2),提取最小的两个结点,N8与结点11组成新结点N19,其权值=8+11=19,
    N8的数值较小,作为左分支,结点11就作为右分支.
(7) 将新结点N19放入有序序列,保持从小到大排序:
    14 N15 N19 23 29
(8) 重复步骤(2),提取最小的两个结点,结点14与N15组成新结点N29,其权值=14+15=29,
    结点14的数值较小,作为左分支,N15就作为右分支.
(9) 将新结点N29放入有序序列,保持从小到大排序:
    N19 23 29 N29  [注意,新结点N29排在原结点29的后面]
(10)重复步骤(2),提取最小的两个结点,N19与结点23组成新结点N42,其权值=19+23=42,
    N19的数值较小,作为左分支,结点23就作为右分支.
(11)将新结点N42放入有序序列,保持从小到大排序:
    29 N29 N42
(12)重复步骤(2),提取最小的两个结点,结点29与N29组成新结点N58,其权值=29+29=58,
    结点29与N29的数值相同,将原结点29作为左分支,N29就作为右分支.
(13)将新结点N58放入有序序列,保持从小到大排序:
    N42 N58
(14)重复步骤(2),提取剩下的两个结点,N42与N58组成新结点N100,其权值=42+58=100,
    数值较小的N42作为左分支,N58就作为右分支.
    最后得到"哈夫曼树":

              N100
           /       \
          N42      N58
         /   \     /  \
        N19  23   29  N29
       /  \          /  \
      N8  11       14   N15
     /  \              /  \
    3    5            7    8

带权路径长度(WPL):
根结点N100到结点29的路径长度是2,结点29的带权路径长度是29*2
根结点N100到结点23的路径长度是2,结点23的带权路径长度是23*2
根结点N100到结点14的路径长度是3,结点14的带权路径长度是14*3
根结点N100到结点11的路径长度是3,结点11的带权路径长度是11*3
根结点N100到结点8的路径长度是4,结点8的带权路径长度是8*4
根结点N100到结点7的路径长度是4,结点7的带权路径长度是7*4
根结点N100到结点5的路径长度是4,结点5的带权路径长度是5*4
根结点N100到结点3的路径长度是4,结点3的带权路径长度是3*4
所以,哈夫曼树的带权路径长度(WPL)等于
29*2 + 23*2 + 14*3 + 11*3 + 8*4 + 7*4 + 5*4 + 3*4 = 271

哈夫曼编码:
规定哈夫曼树的左分支代表0,右分支代表1.
从根结点N100到结点29,先经历右分支,再经历左分支,结点29的编码就是10
从根结点N100到结点23,先经历左分支,再经历右分支,结点23的编码就是01
从根结点N100到结点14,经历两次右分支,再经历左分支,结点14的编码就是110
如此类推,得出所有结点的"哈夫曼编码":
权值29: 10
权值23: 01
权值14: 110
权值11: 001
权值8 : 1111
权值7 : 1110
权值5 : 0001
权值3 : 0000



二分查找的判定树和二叉排序树画法如何?
二分查找的判定树和二叉排序树画法如下:将序列48、38、65、97、13、27、76、49放到一棵二叉排序树中。首先,画出一棵普通的二叉树,将序列中第一个数48放到根节点中;第二个数耍王38比48小,因此放到左子树中;第三个数65比48大,因此放到右子树中。接着看序列中的第四个数97,比48大,因此...

如何画二叉查找树?
1、画出该树 :如下图左边所示。然后根据树的二叉链表表示法表示存储结构如图右边所示:注意这里的指针域为左边表示第一个孩子*firstchild,右边表示兄弟*nextsibling 2、接着进行树与二叉树的转换就可以得到结果了,核心思想:左子树放孩子,右子树放兄弟,则有如图所示的二叉树:

请问二叉树怎么画图?
由前前序第一个为A,所以根节点,所以A的左子树为D、G、B,右子树为E、I、H、C、F。第二个根节点为B,又由中序的出B的左子树为D、G,然后得出D的右子树为G,C为A的右子树,依次进行判断,最后的出二叉树的序列。二叉树图,如下图:...

谁能帮我画个二叉树图
前序遍历:先访问根节点,然后遍历左子树,再遍历右子树。

19,32,21,35,40,17,12二叉排序树怎么画
1、首先创建根节点,将19作为根节点的值。2、然后根据其他节点的值,将其插入到树中。3、然后按照从小到大的顺序插入节点,以确保树保持平衡。4、然后当树中存在重复值时,选择较小的节点作为左子节点,较大的节点作为右子节点。5、最后重复上述步骤,直到所有节点都被插入到树中。

二叉判定树怎么画怎么取中
画出决策树的主干内容,决策节点:通常用矩形框来表示2向右边延伸出二级决策分支。3依次向右延伸出三级分支,每个分叉路径则代表的某个可能的属性值

如何画二叉树
1、确定根节点 2、确定该节点的左儿子与右儿子 3、递归下去,直到所有节点都不再有儿子节点 根据二叉树具体的存储结构,确定根及儿子节点的方法也不一样 从你这图来看,A-G是按层遍历的,既自顶至下,自左至右的顺序遍历 如果是用数组来存,可以表示为 索引 0 1 2 3 4 5 6 7 8 节点 A...

这个二叉树怎么画啊
所以A一定是顶点,中序排序可以分为两个子树EBCD,FHIGJ,我们就将这两个子树分别用一条横线画出来,表示第一层,然后在前序中分别找出两个子树,也用横线画出来,用同样的方法对左子树再分子树,用第二条横线画出来,表示第二层。同样就这样分析。看图:http:\/\/img.photo.163.com\/7O4F7yEw5xUiD...

二叉树的画法及判定
G在第二数列中位于已确定的E的左侧,那么G就是E的左结点;第六个是C,C在第二个数列中位于已确定点A的右侧,C是A的右结点;下一个是F,F在已确定结点C的右侧,F是C的右结点;最后一个H,H在C的右侧F的左侧,则F是C的左结点。好了整个二叉树出来了,后序遍历自己看就行了。

如何画出二叉树?
1)先序遍历,按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。2)中序遍历,首先遍历左子树,然后访问根结点,最后遍历右子树。3)后序遍历,可记做左右根。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。4)这棵二叉树的根节点是A...

理塘县17096357056: 什么是哈夫曼树呢? -
董胃比适: 夫曼树是带权路径长度最小的二叉树,用途是平均查找信息的代价最小. 普通二叉树的用途也普通,比较通用,就是信息存储和查找. 普通二叉树可能有的只有一个子节点,而哈夫曼树一定有两个.

理塘县17096357056: 哈夫曼树是二叉树吗? -
董胃比适: 哈夫曼树不一定是二叉树,也有可能有度为m的哈弗曼树,度为m的哈弗曼树只有度为m的结点和度为0的结点.

理塘县17096357056: 为什么99个结点的哈夫曼树,用二叉链表,它的空指针域会是51个? -
董胃比适: 二叉链表构造方法是左孩子右兄弟,根节点无兄弟、存在一个空指针域. 50个叶子结点,51个空指针.因为是二叉链表,就是孩子兄弟表示法,不是一般的二叉树那样画,要转化一下. 在计算机数据处理中,霍夫曼编码使用变长编码表对源符...

理塘县17096357056: 求介绍下二叉树的遍历和哈夫曼树的运用! -
董胃比适: 二叉树的遍历是指按照某种方法顺着一条路径访问二叉树中的各个结点,使得每个结点均被访问一次,且仅被访问一次,二叉树的遍历方法有三种,先序遍历,中序遍历,后序遍历.下一个问题我也不是很清楚了.

理塘县17096357056: 哈夫曼树和二叉树的问题~
董胃比适: 问题1:这个题只能描述,而不能画出.若非空树它有三种情况:只有根结点;只有左子树;只有右子树.问题2:哈夫曼树,N个叶子结点有2N-1个结点也比较好理解,因为它只有度为0或度为2的结点,而叶子结点就是度为0结点,即为N;在二叉树中度为0的结点是度为2的结点数目加1(这点是可以证明的),所以度为2的结点数目为N-1,两者加起来就是2N-1啦.

理塘县17096357056: 对字符串bcbabbbcab直接进行Huffman编码,将之编码成二进制串,并计算平均码长 -
董胃比适: 1、点击左下角开始菜单按钮. 2、在开始菜单下方搜索框中搜索cmd. 3、敲下回车键,打开cmd窗口. 4、输入mysql -u root -p命令,然后回车. 5、提示输入密码,输入正确的密码,进入mysql命令行. 6、SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));.

理塘县17096357056: 到底什么是哈夫曼树啊,求例子 -
董胃比适: 哈夫曼树是给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近. 例子: 1、将w...

理塘县17096357056: 问大家个问题,求哈夫曼树的最长编码长度,能不能用二叉树求深度的来求 -
董胃比适: 可以这样说吧,但要注意n个叶子的哈夫曼树是一棵特殊的二叉树,叶子的最大层次减1,即为 哈夫曼树的最长编码长度 ,

理塘县17096357056: 二叉搜索树是完全二叉树吗 -
董胃比适: 二叉查找树(Binary Search Tree),或者是来一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则自左子树上所有结点的值知均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二道叉排序树.所以不一定是

理塘县17096357056: 在有N个叶子节点的哈夫曼树中,其节点总数为()? -
董胃比适:[选项] A. 不确定 B. 2N-1 C. 2N+1 D. 2N

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网