2022年2022年关于二叉树的基本操作与输出哈夫曼编码的C语言程序 .pdf

上传人:C****o 文档编号:39896218 上传时间:2022-09-08 格式:PDF 页数:7 大小:43.35KB
返回 下载 相关 举报
2022年2022年关于二叉树的基本操作与输出哈夫曼编码的C语言程序 .pdf_第1页
第1页 / 共7页
2022年2022年关于二叉树的基本操作与输出哈夫曼编码的C语言程序 .pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《2022年2022年关于二叉树的基本操作与输出哈夫曼编码的C语言程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年关于二叉树的基本操作与输出哈夫曼编码的C语言程序 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、注:本程序主要是关于二叉树的一些基本操作,包括前序遍历, 中序遍历, 后序遍历以及求出总结点以及叶子结点的数目(本程序在输入时是默认以先序序列输入各个结点的数值。 如果是其它方式, 则三个遍历程序会有略微变化)以及哈夫曼编码的输出。以下程序除汉字外均为在英文环境中编写,可直接复制到VC 编程软件中运行。#include #include #include #include /getch()所需int num; typedef struct node /定义二叉树的结构体 char data; struct node *lchild,*rchild; BinTNode,*BinTree; Bin

2、Tree T; typedef struct /定义哈夫曼的结构体 int weight; int parent,lchild,rchild; HTNode,*HuffmanTree; HuffmanTree p; typedef char * *HuffmanCode; void CreateBinTree(BinTree &T) /建树 char ch; ch=getch(); if (ch= ) printf(_); T=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -

3、第 1 页,共 7 页 - - - - - - - - - else printf(%c,ch); T=(BinTNode *)malloc(sizeof(BinTNode); T-data=ch; CreateBinTree(T-lchild ); CreateBinTree(T-rchild ); void Preorder(BinTree &T) /先序遍历 if (T) printf(%c,T-data); Preorder(T-lchild); Preorder(T-rchild); void P() /先序遍历的调用 system(cls); printf( 先序遍历的结果如下:n

4、nnn); Preorder(T); void Inorder(BinTree &T) /中序遍历 if(T) Inorder(T-lchild); printf(%c,T-data); Inorder(T-rchild); void I() /中序遍历的调用 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - system(cls); printf( 中序遍历的结果如下:nnnn); Inorder(T); void Postor

5、der(BinTree &T) /后序遍历 if(T) Postorder(T-lchild); Postorder(T-rchild); printf(%c,T-data); void Po() /后序遍历的调用 system(cls); printf( 后序遍历的结果如下:nnnn); Postorder(T); int Ylen(BinTree &T) /求叶子结点个数 if (T) if(T-lchild=NULL&T-rchild=NULL) num+; Ylen(T-lchild); Ylen(T-rchild); return num; int Slen(BinTree &T)

6、/求总结点个数 if (T) num+; Slen(T-lchild); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - Slen(T-rchild); return num; void l() /将总结点以及叶子结点的数目进行输出 system(cls); num=0; printf( 叶子结点的个数为:%dnnnn,Ylen(T); num=0; printf( 总结点的个数为:%dnnnn,Slen(T); void m(

7、) /关于二叉树的操作总函数 int h; system(cls); printf( 创造一个二叉链表存储的二叉树n); printf( 请以先序序列输入所有结点的字符(虚结点用空格字符表示):n); CreateBinTree(T); system(cls); while (1) printf( nnnn); printf(1. 先序遍历 n); printf(2. 中序遍历 n); printf(3. 后序遍历 n); printf(4. 统计所见二叉树中叶子结点个数和结点总数nnnnnn); printf( 请输入操作的序号:); scanf(%d,&h); switch (h) cas

8、e 1:P();break; case 2:I();break; case 3:Po();break; case 4:l();break; void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n) /哈夫曼编码 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - int i,j,start,f,m1; int c; char *cd; if(n=1) retur

9、n; m1=2*n-1; HT=(HuffmanTree)malloc(m1+1)*sizeof(HTNode); for(p=HT+1,i=1;iweight=*w; p-parent=0; p-lchild=0; p-rchild=0; for(;iweight=0; p-parent=0; p-lchild=0; p-rchild=0; for(i=n+1;i=m1;+i) int min,s1,s2; min=10000; for(j=1;j=i-1;j+) if (HTj.parent=0) if (int)HTj.weight=(int)min) min=HTj.weight; s

10、1=j; min=100000; for(j=1;j=i-1;j+) if(j!=s1) if (HTj.parent=0) if(int)HTj.weight=(int)min) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - min=HTj.weight; s2=j; HTs1.parent=i; HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.wei

11、ght+HTs2.weight; HC=(HuffmanCode)malloc(n+1)*sizeof(char *); cd=(char *)malloc(n*sizeof(char); cdn-1=0; for(i=1;i=n;i+) start=n-1; for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0; else cd-start=1; HCi=(char *)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); free(cd); void

12、OutputHuffman() /哈夫曼编码输出 int i; int n; int Q100; HuffmanTree HT; HuffmanCode HC; system(cls); printf( 请输入您想输入的字符个数:); scanf(%d,&n); for(i=0;in;i+) printf( 请输入第 %d 个字符的权值:n,i+1); scanf(%d,&Qi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - -

13、 HuffmanCoding(HT,HC,Q,n); for(i=1;i=n;i+) printf(nn 哈夫曼的编码分别为:); while (*HCi) printf(%c,*HCi); HCi+; void main() /主函数 int i; while (1) printf(nn 1.关于二叉树的建立与操作nn); printf(nn 2.实现哈夫曼编码nnnnnn); printf( 请输入您想输入的操作编号:); scanf(%d,&i); switch (i) case 1:m();break; case 2:OutputHuffman();break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁