C语言怎么实现哈夫曼树的构建

  介绍

这篇文章主要讲解了C语言怎么实现哈夫曼树的构建,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

哈夫曼树(霍夫曼树)又称为最优的树。

<强> 1,路径和路径长度

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L - 1。

<强> 2,结点的权及带权路径长度

若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

<强> 3,树的带权路径长度

树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL

 # include & lt; stdio.h>
  # include & lt; stdlib.h>
  # include & lt; string.h>/*哈夫曼树的结构体*/typedef struct stHuNode
  {
  int数据;//权值
  struct stHuNode * lchild, * rchild;
  }HUNODE;/*
  *找出权值数组里面,最小的两个权值下标
  *函数请参:HUNODE * pArray[]存放节点的指针数组
  int数n组里面的元素个数
  int * p1存放最小权值的下标
  int * p2存放第二小权值的下标
  */int findSmallData (HUNODE * pArray [], int, int * p1, int * p2)
  {
  int指数=0;
  int fir_small=0 xffff sec_small=0 xffff;
  
  如果(pArray==NULL)
  {
  返回1;
  }
  
  (指数=0;指数& lt;n;指数+ +)
  {/*当前的下标下面是有节点的*/如果(pArray(指数)!=NULL)
  {
  如果(pArray(指数)→数据& lt;fir_small)
  {
  sec_small=fir_small;
  fir_small=pArray(指数)→数据;
  
  * p2=* p1;
  * p1=指数;
  }
  else if (pArray(指数)→数据& lt;sec_small)
  {
  sec_small=pArray(指数)→数据;
  * p2=指数;
  }
  }
  }
  
  返回0;
  }/*
  *函数功能:构建哈夫曼树
  *函数请参:int *权值数组
  int n这个数组里面有多少个数据
  */HUNODE * createHuTree (int *, int n)
  {
  int指数=0;
  
  int fir_small=0, sec_small=0;/*定义一个指针数组,最大是100 */HUNODE * pArray [100];
  HUNODE * pNewNode=零;/*先创建n个根节点*/memset (pArray 0 sizeof (HUNODE) * n);
  (指数=0;指数& lt;n;指数+ +)
  {
  pNewNode=(HUNODE *) malloc (sizeof (HUNODE));
  memset (pNewNode 0 sizeof (HUNODE));
  
  pNewNode→数据=https://www.yisu.com/zixun/a(指数);
  pNewNode -> lchild=零;
  pNewNode -> rchild=零;/*把这个节点存放在指针数组中去*/pArray(指数)=pNewNode;
  }/*构建哈夫曼树*/(指数=0;指数 data=pArray [fir_small] ->数据+ pArray [sec_small] ->数据;/*最小的是左孩子,第二小的是右孩子*/pNewNode -> lchild=pArray [fir_small];
  pNewNode -> rchild=pArray [sec_small];/*把新的节点放入到指针数组里面去*/pArray [fir_small]=零;
  pArray [sec_small]=pNewNode;
  
  }
  返回pNewNode;
  }/*前序遍历该二叉树*/空白preOrderHuffMan (HUNODE *根)
  {
  如果(根)
  {
  printf (" % d”,根->数据);
  preOrderHuffMan(根-> lchild);
  preOrderHuffMan(根-> rchild);
  }
  }
  
  int main ()
  {
  int [4]={7、5、2、4};
  HUNODE *根=零;/*构建哈夫曼树*/根=createHuTree (4);/*前序遍历*/preOrderHuffMan(根);
  printf ("/n”);
  
  返回0;
  }

看完上述内容,是不是对C语言怎么实现哈夫曼树的构建有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

C语言怎么实现哈夫曼树的构建