




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验6:二叉树的基本操作
一、实验目的
1.掌握二叉树的非线性和递归性特点
2.理解二叉树的存储结构
3.掌握二叉树遍历操作
二、实验内容
1.使用二叉链表,创建一个如图(a)的二叉树。可以用先序、中序和后序方式遍历二叉树并将
结点输出,.统计出一个二叉树叶子节点及树的深度。
#include<iostream>
#include<cstdio>
usingnamespacestd;
typedefcharDatatype;
intent;
structTNode
(
Datatypedata;
TNode*rchild;
TNode*Ichild;
voidCreatTree(TNode*&root)
(
charndata;
cin»ndata;
if(ndata==^#^)root=NULL;
else
(
root=newTNode;root->data=ndata;
CreatTree(root->lchild);
CreatTree(root->rchild);
}
)
voidpreOrderTraver(TNode*&root)//先
(
if(root!=NULL)
cout«root->data«nn;
preOrderTraver(root->lchild);
preOrderTraver(root->rchild);
)
)
voidInOrderTraver(TNode*&root)〃中
(
if(root!=NULL)
(
InOrderTraver(root->lchild);
cout«root->data«"
InOrderTraver(root->rchild);
)
)
voidposOrderTraver(TNode*&root)〃后
(
if(root!=NULL)
(
posOrderTraver(root->lchild);
posOrderTraver(root->rchild);
cout«root->data«"
)
)
intBTHeight(TNode*t)/〃二叉树的深度
(
intans=0;
if(t==NULL)return0;
elseif(t!=NULL)
ans+=max(ans,max(BTHeight(t->lchild),BTHeight(t->rchild))+1);
returnans;
)
intBTLeafNode(TNode*t)/〃二叉树的叶子节点数
(
if(t!=NULL)
(
if(t->lchild==NULL&&t->rchild==NULL)
(
printf("%c",t->data);
cnt++;
)
else
(
BTLeafNode(t->lchild);
BTLeafNode(t->rchild);
returnent;
}
intmain()
{
TNode*root=NULL;
coutvv”请输入该二叉树的先序遍历结果:\n";
CreatTree(root);
coutvv”先序遍历结果"vvendl;
preOrderTraver(root);cout«endl;
cout<v”中序遍历结果:"<<endl;
InOrderTraver(root);cout«endl;
cout<<”后序遍历结果:n«endl;
posOrderTraver(root);cout«endl;
printf(”\n输出二叉树的深度:");
intsum=BTHeight(root);
cout«sum«endl;
printff输出二叉树的叶子结点:”);
intans=BTLeafNode(root);
printf(”\n输出二叉树的叶子结点的个数:”);
cout«ans«endl;
return0;
)
运行结果:
存在问题:无
2.对于给定的w={2,3,4,7,8,9}权值,试构造一棵哈夫曼树,并给出各个节点的huffman编码及huffman数
组的值。
#defineN50〃叶子结点数
#defineM2*N-1〃树中结点总数
typedefstruct
(
chardata[5];〃结点值
intweight;〃权重
intparent;〃双亲结点
intIchild;〃左孩子结点
intrchild;〃右孩子结点
}HTNode;
typedefstruct
charcd[N];〃存放哈夫曼码
intstart;
}HCode;
voidCreateHT(HTNodeht[],intn)
{
inti,k,Inode,mode;
doubleminl,min2;
for(i=0;i<2*n-l;i++)〃所有结点的相关域置初值-1
htfi].parent=ht[i].lchild=ht[i].rchild=-l;
for(i=n;i<2*n-l;i++)〃构造哈夫曼树
(
minl=min2=32767;//Inode和mode为最小权重的两个结点位置
lnode=rnode-1;
for(k=0;k<=i-l;k++)
if(ht[k].parent==-l)〃只在尚未构造二叉树的结点中查找
(
if(ht[k].weighKmin1)
(
min2=minl;rnode=lnode;
mini=ht[k].weight;lnode=k;
)
else
(
if(ht[k].weight<min2)
(
min2=ht[k].weight;
rnode=k;
ht[i].weight=ht[lnode].weight+ht[rnode].weight;
ht[il.lchild=lnode;ht[i].rchild=rnode;
ht[lnode].parent=i;ht[rnode].parent=i;
)
)
voidCreateHCode(HTNodeht[l,HCodehcd[],intn)
(
inti,f,c;
HCodehe;
for(i=0;i<n;i++)〃根据哈夫曼树求哈夫曼编码
(
f=ht[i],parent;
while(f!=-l)〃循序直到树根结点
(
if(htff].lchild==c)〃处理左孩子结点
else〃处理右孩子结点
c=f;f=ht[f].parent;
)
指向哈夫曼编码最开始字符
hcd[i]=hc;
)
)
voidDispHCode(HTNodeht[],HCodehcd[],intn)
(
inti,k;
intsum=0,m=0;
intj;
printf("输出哈夫曼数组的值及编码:\n");〃输出哈夫曼编码
for(i=0;i<n;i++)
(
j=0;
printf("%s:\t",ht[i].data);
for(k=hcdfi].start;k<=n;k++)
printf(0%cn,hcd[i].cd[k]);
j++;
)
m+=htfi].weight;
sum+=ht[i].weight*j;
printf("\nn);
)
printf("\n带权路径长度WPL=%d\n",sum);
)
intmain()
(
intn=6,i;〃11表示初始字符串的个数
char*str[]={"2","3","4","7","8","9"};
intfnum[]={2,3,4,7,8,9};
HTNodeht[M];
HCodehcd[N];
for(i=0;i<n;i++)
(
strcpy(ht[i].data,str[i]);
ht[i].weight=fnum[i];
)
printf("\n");
CreateHT(ht,n);
CreateHCode(ht,hcd,n);
DispHCode(ht,hcd,n);
printf("\n");
)
测试数据:
运行结果:
存在问题:
二、本次实验问题分析及学习建议
备注:
1.每次实验完毕,各位学生可提交实验报告纸质(A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基础护理无菌操作
- 预防煤气中毒主题班会2
- 八年级上册《三角形的稳定性》课件与练习
- 打破瓶颈的2024年特许金融分析师试题及答案
- 【名师课件】1.4 课件:验证动量守恒定律-2025版高一物理必修二
- 第八章 作业30 动能和动能定理-2025版高一物理必修二
- 预防夏季中暑大班
- CFA备考阶段试题及答案指导
- 2024年CFA考试必会知识试题及答案
- 学习金融学的有效途径试题及答案
- 电力设计收费标准2018
- HY/T 240.3-2018海水循环冷却系统设计规范第3部分:海水预处理
- GB/T 4056-2019绝缘子串元件的球窝联接尺寸
- GB/T 3625-2007换热器及冷凝器用钛及钛合金管
- GB/T 19355.1-2016锌覆盖层钢铁结构防腐蚀的指南和建议第1部分:设计与防腐蚀的基本原则
- GB/T 17214.4-2005工业过程测量和控制装置的工作条件第4部分:腐蚀和侵蚀影响
- GB/T 17144-2021石油产品残炭的测定微量法
- 显微镜检验报告
- 信息安全概论-张雪锋-习习题答案
- 微创外科技术课件
- 学习2022年建团一百周年主题班会PPT
评论
0/150
提交评论