首页 > 编程知识 正文

哈夫曼树是二叉排序树吗,为什么哈夫曼树是最优二叉树

时间:2023-05-05 19:10:53 阅读:168547 作者:3112

给出n个权重作为n个叶的节点,构造一棵二叉树。 当该树的加权路径长(wpl )为最小时,将这种二叉树称为最佳二叉树,也称为霍夫曼树,也有翻译为霍夫曼树的书。 哈曼树是具有最短加权路径长度的树,具有大权重的节点接近根的术语路径和路径长度:将在一棵树中从一个节点向下可到达的儿孙节点之间的路径称为路径。 将更多分支的数量称为路径长度。 如果根节点层数为1,则从根节点到第l层节点的路径长度为L-12 )节点的权重及加权路径长度:如果对树中的节点赋予了某个有意义的值,则将该值称为该节点的权重。 节点加权路径长度3360从结点到该节点的路径长度和该节点的权重的积木的加权路径长度:树的加权路径长度被规定为所有叶节点的加权路径长度之和,表示为WPL(weighted pathlength ) 4WPL最小的是哈夫曼树的解题思想构成哈夫曼树的步骤:

5 .按从小到大排序,将各数据、各数据组成一个节点,各节点可视为最简单的二叉树

6 .取出根节点权重最小的二叉树

7 .创建新的二叉树。 这个新的二叉树的根节点的权重是前面两个二叉树的根节点的权重之和

8 .根据根节点的权重大小重新排列这个新的二叉树,直到数列中重复1-2-3-4的步骤,所有的数据都被处理,得到哈夫曼树

publicstaticnodecreatehuffmantree (int [ ] arr ) ) { listnode nodes=new ArrayList node }; for(intvalue:arr ) nodes.add (new node ) value ); }while(true ) if ) nodes.size )=1) { break; //1 .先排序collections.sort (nodes )//2.检索最小的2个节点nodeleftnode=nodes.get(0) noderightnode=nodes.get(1 //3新的二叉树node parent=new node (left node.valuerightnode.value ); parent.left=leftNode; parent.right=rightNode; nodes.remove(leftnode; nodes.remove(rightnode; nodes.add(Parent; }returnnodes.get(0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。