- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.数据结构与算法6
; Chap 6 树(二);§1 树与森林 ;1.1 树的存储结构 ;1. 父结点数组表示法;A;2. 左孩子右兄弟表示法;;;;1.2 树的实现 ;2.树类 ;3. 基本操作的算法;算法6.1 SetCurNode功能:设置当前结点;bool CurNode(TreeNode *r, Type e)
{//在根为r的树中查找值为e的结点,将其设置为当前结点
if(r==NULL)return FALSE;
if(r-data==e){
current=r;
return TRUE;}
if(CurNode(r-leftChild, e)==TRUE) //递归遍历r的左孩子
return TRUE;
TreeNode *p=r-rightSibling;
while(p!=NULL){ //递归遍历r的右兄弟
if(CurNode(p, e)==TRUE)
return TRUE;
p=r-rightSibling;}
return FALSE;
};算法6.3 ParentElem 功能:查找父结点并读取其元素;算法6.4 Parent 功能:查找父结点; while(sp!=NULL){
if(sp==k){
current=r;
return TRUE;
}
//右兄弟的孩子的递归查找
if(Parent(sp-leftChild, k)==TRUE)
return TRUE;
sp=sp-rightSibling;
}
return FALSE;
} ;算法6.5 LeftChild 功能:查找左孩子;算法6.6 RightSibling功能:查找右兄弟;算法6.7 AddNewChild功能:添加孩子;算法6.8 AddChild功能:添加孩子;void AddChild(TreeNode *x, Type e)
{ //为结点x添加元素为e的孩子
TreeNode *p=new TreeNode, *t;
p-data=e;
p-leftChild=p-Sibling=NULL;
if(x-leftChild==NULL)
x-leftChild=p;
else{
t=x-leftChild;
while(t-rightSibling!=NULL)
t= t-rightSibling;
t-rightSibling=p;
}
};算法6.9 InsertLeftChild功能:插入左孩子;算法6.10 AddRightSibling功能:添加右兄弟;算法6.11 InsertSibling功能:插入右兄弟;1.3 树与森林的遍历 ;1. 树的深度优先遍历;;算法6.12 PreTreeOrder功能:树的先序深度优先遍历 ;2.广度优先遍历;3. 森林的遍历;;1.4 森林与二叉树的转换;1. 树转化为二叉树 ;;2. 森林转化为二叉树;;; §2 哈夫曼树 ;2.1 哈夫曼树的应用 ;;;;;2.2 哈夫曼树的基本概念;;;;;2.3 哈夫曼树的构造算法;;2.4 哈夫曼编码 ;;;;;;2.5 哈夫曼树类的实现;;;2. 哈夫曼树类的定义 ; templatetypename Type
class HfmTree{ //哈夫曼树类
private:
HfmNode *forest; //哈夫曼树结点数组,用于构造并保存哈夫曼树
int size; //待编码的符号个数(叶子结点个数)
HfmCode *hfm_code; //哈夫曼编码数组
int MinTree(int pos); //查找森林中的最小树
public:
HfmTree(int n){ // n为待编码的符号个数
size=n;
forest=new HfmNodeType[size*2-1]; //为森林分配空间
hfm_code=new HfmCodeType[size]; //为编码数组分配空间
}
~HfmTree(){delete[]forest;}
void MakeHfmTree(Type *datas, int *w); //构造哈夫曼树
文档评论(0)