⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 构造哈夫曼树.txt

📁 数据结构C实现对二叉树的操作
💻 TXT
字号:
#define MAX 100
typedef  struct
{  int data;
   int pa,lc,rc;
}JD;

void huffman(int n,int w[],JD t[])    // t是存储结点的数组,n是叶子结点数,W是权值(即叶子)数组
{  int i,j,k,x1,x2,m1,m2;
  
   for(i=1;i<(2*n);i++)    //一棵有n个叶子结点的Huffman树有2n-1个结点
   {  t[i].pa=t[i].lc=t[i].rc=0;  //清零
      if (i<=n)
         t[i].data=w[i];
      else
         t[i].data=0;  // 将n个权值(即叶子)放入数组t
   } //准备工作结束

   for(i=1;i<n;i++) // 数组t 在准备工作结束后,下剩n-1个空位置来存放合成的新结点
   {  m1=m2=MAX;
      x1=x2=0;  //赋初值
      for(j=1;j<(n+i);j++)
      {  if( (t[j].data<m1) && ( t[j].pa==0) )
         {  m2=m1;  x2=x1;
            m1=t[j].data;  x1=j;  //当前最小权值放在m1中
         }
         else if( (t[j].data<m2) && ( t[j].pa==0) )  //当前次小权值放在m2中
         {  m2=t[j].data; x2=j; }
      } //查找一对未被处理过的最小权值
      k=n+i; //合成的新结点在数组中的下标
      t[x1].pa=t[x2].pa=k; 
      t[k].data=m1+m2;  //为合成的新结点赋值
      t[k].lc=x1;
      t[k].rc=x2;
   }//继续查找下一对未被处理过的最小权值
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -