zoukankan      html  css  js  c++  java
  • haffmanTree

      1 /*请在此处编写代码,完成哈夫曼编码,并能输出每个叶子结点的编码*/
      2 /**********  Begin  *********/
      3 
      4 /*请在此处编写代码,完成哈夫曼编码,并能输出每个叶子结点的编码*/
      5 /**********  Begin  *********/
      6 #include <iostream>
      7 using namespace std;
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #define MAX  100000
     11 char a[10]= {''};
     12 struct HtNode {
     13     int data;
     14     int parent,llink,rlink;
     15 };
     16 struct HtTree {
     17     int m;
     18     int root;
     19     struct HtNode *ht;
     20 };
     21 typedef struct HtTree *PHtTree;
     22 
     23 PHtTree fuffman(int m ,int *w)
     24 {
     25     PHtTree pht;
     26     int i,j,x1,x2,m1,m2;
     27     pht=(PHtTree)malloc(sizeof(struct HtNode));
     28     if(pht == NULL)
     29     {
     30         printf("out of space
    ");
     31         return pht;
     32     }
     33     pht->ht=(struct HtNode* )malloc(sizeof(struct HtNode)*(2*m-1)) ;
     34     if(pht->ht==NULL)
     35     {
     36         printf("out of space
    ");
     37         return pht;
     38     }
     39     for(i=0; i<2*m-1; i++)
     40     {
     41         pht->ht[i].llink=-1;
     42         pht->ht[i].rlink=-1;
     43         pht->ht[i].parent=-1;
     44         if(i<m)pht->ht[i].data=w[i];
     45         else pht->ht[i].data=-1;
     46     }
     47     for(i=0; i<m-1; i++)
     48     {
     49         m1=MAX;
     50         m2=MAX;
     51         x1=-1;
     52         x2=-1;
     53         for(j=0; j<m+i; j++)
     54         {
     55             if(pht->ht[j].data<m1&&pht->ht[j].parent==-1)
     56             {
     57                 m2=m1;
     58                 x2=x1;
     59                 m1=pht->ht[j].data;
     60                 x1=j;
     61             }
     62             else if(pht->ht[j].data<m2&&pht->ht[j].parent==-1)
     63             {
     64                 m2=pht->ht[j].data;
     65                 x2=j;
     66             }
     67         }
     68         pht->ht[x1].parent=m+i;
     69         pht->ht[x2].parent=m+i;
     70         pht->ht[m+i].data=m1+m2;
     71         pht->ht[m+i].llink=x1;
     72         pht->ht[m+i].rlink=x2;
     73     }
     74     pht->root=2*m-2;
     75     return pht;
     76 }
     77 void  print(PHtTree T,int num,int i)
     78 {
     79     if(T->ht[num].rlink==-1&&T->ht[num].llink==-1)
     80     {
     81         printf("%d ",T->ht[num].data);
     82         for(int j=0; j<i; j++)
     83             printf("%c",a[j]);
     84         printf("
    ");
     85         return ;
     86     }
     87     a[i]='0';
     88     print(T,T->ht[num].llink,i+1);
     89     a[i]='1';
     90     print(T,T->ht[num].rlink,i+1);
     91 }
     92 int main()
     93 {
     94     int i,m,w[1000];
     95     cin>>m;
     96     for(i=0; i<m; i++)
     97         cin>>w[i];
     98     PHtTree pht=fuffman(m,w);
     99     print(pht,pht->root,0);
    100 }
    101 
    102 /**********  End  *********/
    103 
    104 
    105 /**********  End  *********/
    View Code
  • 相关阅读:
    dbgrideh标题排序
    ctrl r w 去掉
    c# 中@ 的三种用法
    vs插件
    oracle查看会话(常规操作)
    3 docker容器
    k8s-组件
    k8s-常见错误
    k8s监控-kube-prometheus
    helm-私有仓库
  • 原文地址:https://www.cnblogs.com/jeseesmith/p/14185978.html
Copyright © 2011-2022 走看看