为什么构造哈夫曼树时30结点的左子树大于右子树?????
不需要,也可以每个左孩子小于每个右孩子,左面大或右面大都无所谓,但必须统一,要么左边大于右边,要么右边大于左边,否则在霍夫曼树的一些应用中会出错
当两个数相同时,无论放在左子树或者右子树,其WPL值是一样的,并不影响编码的长度,只是对应字符编码的值互换了而已。
哈弗曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。
也就是说哈夫曼树并没有规定左子树比右子树小,排序树有这样的规定,只要是权值越小的叶子结点越远离根结点。所以画13 画在右边也是可以的。
为什么构造哈夫曼树时30结点的左子树大于右子树???
哈弗曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点 越远离根结点。也就是说哈夫曼树并没有规定左子树比右子树小,排序树有这样的规定,只要是权值越小的叶子结点越远离根结点。所以画13 画在右边也是可以的。
给定一组权值,可以唯一构造出一棵哈夫曼树吗?
不可以。因为没有限定左右子树,并且有权值重复时,可能树的高度都不唯一,唯一的只是带权路径长度之和最小。哈夫曼树(霍夫曼树)又称为最优树.1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,...
哈夫曼树怎么构造?
先构造哈夫曼树,其构造规则如下:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、...
哈夫曼树的构造规则
哈夫曼树的构造规则是若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数...
下面关于哈夫曼树叙述中,正确是( )。
【答案】:C 哈夫曼树是一种特殊二叉树,但它不是完全二叉树,也不是平衡二叉树,给出 n个权值{w1,w2,…,wn}构造一棵具有n个叶子结点哈夫曼树方法如下:第一步,构造 n个只有根结点二叉树集合F={ T1,T2 ,…,Tn},其中每棵二叉树Ti根结点带权为 Wi (1≤k≤n);第二步,在集合 F...
有人可以帮我注释一段关于用c语言实现哈夫曼树的代码吗?
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是...
什么是哈夫曼树?
哈夫曼树的定义是构造一棵最短的带权路径树,所以这种树为最优二叉树。最优二叉树的度只有0或者2。给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
由五个带权值为9,2,3,5,14的叶子结点构成哈夫曼树,带权路径长度为...
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点...
请问构造哈夫曼树时是否分左右子树
分,计算机三级数据库的基本知识
哈夫曼树的构造规则是什么?
哈夫曼树的构造规则为:(1) 将16 ,5 ,9,3,20,1看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在16 ,5 ,9,3,20,1森林中选出两个根结点的权值最小的树合并,(即1,3)作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除...
云沸复方: 假设有n个权值,则构造出的哈夫曼树有n个叶子结点. n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树. 数据结构相关书上有详细解释及实例.
济宁市19872587088: 数据结构 哈夫曼树在构造时 有顺序要求吗 比如左右子树的顺序要固定什么的 必须谁左谁右之类的 ? - ?
云沸复方: 1、我们可以统一确定左子节点和右子节点的大小关系,例如所有构造都必须使得左子节点的权值不小于右子节点,免得给出相同的原始节点序列,所构造的哈夫曼树结构不同2、节点按照权值排序的规则,例如两个原始节点或者一个原始节点和...
济宁市19872587088: 哈夫曼树左子树跟节点的权值一定小于右子树根的权值吗? - ?
云沸复方: 没有规定说哈夫曼树构造出来时唯一的,哈夫曼编码只是为了让带权路径达到最小,所以,同层不按大小排序,对树的带权路径没有影响,也就是编码长度没有变化,变化的只是编码的值变了,如:3 3/ \ / \ A1 B2 B2 A1 A的编码本来是0,B是1,变为B是0 A是1
济宁市19872587088: 哈夫曼树左右两个子节点对调有影响吗 - ?
云沸复方: 哈夫曼树构造时选择两个最小的权值点,默认小的在左边大的在右边,其实没有这样的规定,编码的长度没有变化,所以左右子树互换没有影响.
济宁市19872587088: 哈夫曼树的构成原理? - ?
云沸复方: #include#include #define MAXSIZE 30/*自定义哈夫曼的最大个数*/ typedef struct { int weight;/*结点的权值*/ int parent;/*结点的双亲*/ int lchild;/*结点的左孩子*/ int rchild;/*结点的右孩子*/ int flag;/*是否用过的标志*/ }HufmTree; int p1,p2;/*...
济宁市19872587088: 哈夫曼树怎样构造编码? - ?
云沸复方: 先编造哈夫曼树,哈夫曼树构造规则: 假设有n个权值,则构造出的哈夫曼树有n个叶子结点. n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) ...
济宁市19872587088: 为什么哈夫曼树的节点不能有两个都是叶子的分支??? - ?
云沸复方: 这个应该是正常的,最后两个454,说明454有左孩子右孩子,而253 420 421 226分别是他们的左右孩子,所以不是双亲节点有4个叶子节点,而是,双亲节点454有4个孙子节点(呵呵,这样的说法希望你能理解)当然需要看源代码才能知道是不是这样表示的,光从字面意思理解双亲节点就是独一无二的parent,左右孩子是没有争议的,就是这个输出为什么输出双亲节点还不输出自己呢,所以忠实于源代码,你可以看看打印huffman的这段代码,这个双亲节点是什么东西,然后就真相大白了.
济宁市19872587088: 有关构造哈夫曼树的问题 - ?
云沸复方: 1. 根据给定的n个权值{w1,w2,…wn}构成n棵二叉树的集合F={T1,T2,..,Tn},其中每棵二叉树Ti中只有一个带权wi的根结点,左右子树均空. 2. 在F中选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值...
济宁市19872587088: 怎样构造合适的哈夫曼树? - ?
云沸复方: 来自百度百科:哈夫曼树构造方法: 假设有n个权值,则构造出的哈夫曼树有n个叶子结点. n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) 在森...
济宁市19872587088: 哈夫曼树的构造,关键字如图 - ?
云沸复方: 哈夫曼树构造规则:假设有n个权值,则构造出的哈夫曼树有n个叶子结点. n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止 根据上述步骤得到的哈夫曼数是 (100) / \ (43) 57 / \ / \ (20) 23 (27) 30 / \ / \9 (11) 11 16 / \ 4 7