树-下(哈夫曼树)

哈夫曼树

  • 带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值W(k),从根结点到每个叶子结点的长度为l(k),则每个叶子结点的带权路径长度之和就是
  • 最优二叉树或哈夫曼树:WPL最小的二叉树
  • 特点
  1. 没有度为1的结点
  2. n个叶子结点的哈夫曼树共有2n-1个结点
  3. 哈夫曼树的任意非叶节点的左子树交换后仍是哈夫曼树

哈夫曼树的构造

typedef struct TreeNode *HuffmanTree
struct TreeNode {
      int Weight;
      HuffmanTree Left, Right;
}
HufmanTree Huffman (MinHeap H) {
      //假设H->Size个权值已经存在H->Elements[]->Weight里
      int i;
      HuffmanTree T;
      BulidMinHeap(H);     //将H->Elements[]按权值调整为最小堆
      for (i = 1; i < H->Size; i++) { //做H->Size-1次合并
            T = malloc(sizeof(struct TreeNode)) ; //建立新的结点
            T->Left = DeleteMin(H);       //从最小堆中删除一个结点,作为新T的左子结点
            T->Right = DeleteMin(H);      //从最小堆中删除一个结点,作为新T的右子结点
            T->Weight = T->Left->Weight+T->Right->Weight;  //计算新权值
            Insert(H, T);                 //将新T插入最小堆
      }
      T = DeleteMin(H);
      return T;
posted @   小哑师兄  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示