数据结结构学习 ---赫夫曼树

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
typedef  struct  {
     unsigned  int  weight;
     unsigned  int  parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef  char  ** HuffmanCode;
 
void  HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC, int  *w, int  n)  {
 
     if  (n < 1)  return ;\
     int  m = 2* n + 1;
     HT = (HuffmanTree)  malloc  (m+1)*  sizeof (HTNode);  //0 号单元未用
     for  ( HuffmanTree p = HT; i=1; i<=n; ++i; ++p; ++w) 
         *p = {*w,0,0,0,0};
     for (; i<=m; ++i; ++p)
         *p = {0,0,0,0};
 
     for (i = n+1; i<=m; i++) {   //建立HuffmanTree
 
         Select(HT,i-1,s1,s2);
         HT[s1].parent = i;
         HT[s2].parent = i;
         HT[i].lchild = s1;
         HT[i].rchild = s2;
         HT[i].weight = HT[s1].weight + HT[s2].weight;
     }
 
     HC = (HuffmanCode) malloc ((n+1)*  sizeof ( char *));
     cd = ( char *)  malloc (n*  sizeof ( char ));
     cd [n-1] =  "\0" ;
     for  ( i=1; i<=n; i++) {
         int  start = n-1;
         for  ( c=i, f = HT[i].parent; f!=0; c=f; f = HT[f].parent )
             if ( HT[f].lchild == c )  cd [--start] =  "0" ;
             else  cd [--start] =  "1" ;
         HC[i] = ( char *)  malloc  ( (n-start)*  sizeof ( char ));
         strcyp(HC[i],&cd[start]);
     }
     free (cd);
 
}

 

------ 无栈非递归遍历赫夫曼树,求赫夫曼编码------

 

复制代码
HC = (HuffmanCode) malloc ( (n+1) * sizeof(char*)); 
int p = m, cdlen = 0;

for ( int i=1; i<=m; ++i)  HT[i].weight = 0;

while(p) {

    if ( HT[p].weight == 0 ) {

        HT[p].weight = 1; 
        if ( HT[p].lchild != 0) {
            p = HT[p].lchild; 
            cd[cdlen++] = "0";
        }else if ( HT[p].lchild == 0) {

            HC[p] = (char*) malloc ((cdlen+1) * sizeof(char));
            cd[cdlen] = "\0"; 
            strcpy(HC[p],cd);
        }
    }else if ( HP[p].weight == 1) {

        HT[p].weight = 2;
        if ( HT[p].rchild != 0) {
            p = HT[p].rchild;
            cd [cdlen++] = "1";
        }else {
            HT[p].weight = 0; p = HT[p].parent; --cdlen;
        }
    }    
}
复制代码

 


本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/archive/2012/11/30/2795617.html,如需转载请自行联系原作者

相关文章
|
14天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11504 126
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
3天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
3741 8
|
2天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
1370 3
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
13天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
7653 139
|
4天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
3天前
|
云安全 供应链 安全
Axios投毒事件:阿里云安全复盘分析与关键防护建议
阿里云云安全中心和云防火墙第一时间响应
1152 0
|
3天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2219 9
|
2天前
|
人工智能 安全 IDE
Claude Code 51万行源码意外泄露:一次 .map 文件事故背后的 AI 工程启示录
源码仓库(Gitee 镜像):https://gitee.com/jeecg/claude-code
1050 3