哈夫曼树左小右大(哈夫曼树左右子树的大小有规定吗)
本文目录
哈夫曼树左右子树的大小有规定吗
哈夫曼树编码里面的父节点的两个子结点是没有顺序要求的,所以s1既可以是左子结点,也可以是右子结点,当然你也可以自己定一个标准来做,但是没有特别的要求的,因为就算不一样,只要在同一层,整棵树的总权值仍然是最小的。数据结构书中的建立赫夫曼树求赫夫曼编码的算法中的Select()函数是用于选择没有双亲且权值最小的两个结点,其序号分别为s1和s2。按照给定权值的顺序查找,s1不一定比s2要小或者相等。s1是赋给左子树,s2赋给右子树。例如:第一次选择,按照5,29,7,8,14,23,3,11的顺序,显然s1=5,s2=3;第二次选择,按照29,7,8,14,23,11,8(5是左子树,3是右子树形成的二叉树根结点权值)的顺序,显然s1=7,s2=8;第三次选择,按照29,14,23,11,8(5是左子树,3是右子树形成的),15(7是左子树,8是右子树形成的二叉树根结点权值)的顺序,显然s1=11,s2=8;同理,最终得到的就是书上的那个图。
哈夫曼树的创建
哈夫曼树不一定是唯一的,选出最小和次小之后哪个放左边都行的,哈弗曼编码唯一只是说得到的码是唯一,但是可以有许多种码,只是它能够唯一地编码和解码。所以,上面两个图应该都是正确的。如果你习惯按照左小右大的规则来构造的话,那只能选择第二幅图了。
为什么构造哈夫曼树时30结点的左子树大于右子树
哈弗曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。也就是说哈夫曼树并没有规定左子树比右子树小,排序树有这样的规定,只要是权值越小的叶子结点越远离根结点。所以画13 画在右边也是可以的。
更多文章:
springboot导入项目(springboot导入太多依赖)
2024年9月3日 21:50
ubuntu安卓版(如何在Ubuntu下配置Android开发环境)
2024年7月15日 14:19
format factory 高级版(formatfactory 格式工厂是什么软件)
2024年7月19日 16:10
java程序设计教程电子科技大学出版社(Java面向对象程序设计)
2024年6月26日 19:19
python单继承和多继承(Python中的面向对象(高级)之私有方法、多继承、多态)
2024年9月28日 14:05
google翻译api官网(google翻译有没有自动检测语种的api)
2024年6月30日 02:52