数据结构之树概论.ppt

  1. 1、本文档共129页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
codetype code[]; /*存放求出的哈夫曼编码*/ hufmtree tree[]; /*已知的哈夫曼树*/ {int i,c,p; codetype cd; /*缓冲变量*/ for(i=0;in;i++) {cd.start=n; c=i; p=tree[i].parent;/*从叶结点出发向上回溯*/ while(p!=-1) {cd.start--; if(tree[p].lchild==c) cd.bits[cd.start]=‘0’;/*tree[i]是左子树,生成代码‘0’*/ else cd.bits[cd.start]=‘1’; c=p; p=tree[p].parent; } code[i]=cd; } } 6.6.2 1)译码算法思想:从哈夫曼树的根结点出发,逐个读入报文的二进制码,若读入0则走向左孩子,否则走向右孩子,一旦到达叶结点译出相应字符。然后重新从根结点出发继续译码,直到整个报文结束。 2)译码算法描述: #define m 2*n-1 decode (code,tree) codetype code[]; hufmtree tree[]; 3、译码 6.6.2 { int i, b; int endflag=-1; i=m-1; scanf(“%d”,b); while (b!=endflag) {if (b==0) i=tree[i].lchild; else i=tree[i].rchild; if (tree[i].lchild==-1) { putchar(code[i].ch); i=m-1; } scanf(“%d”,b); } if (tree[i].lchild!=-1) printf(“\nerror\n”); } 注意:哈夫曼树是严格的二叉树,树中无度为1的结点。因此仅有tree[i].lchild=-1,即可判定tree[i]是叶结点。 6.6.2 * * 个发和的发个和他和 6.5.2 树的存储 树的储存实现的常用三种方法为:双亲链表表示法,孩子链表表示法和孩子兄弟链表表示法。 1.双亲链表表示法 每个结点最多只有一个双亲,因此对每个结点引入一个指针,使其指向该结点的双亲。 该方法可以采用动态链表,也可采用静态链表。采用后者运算的实现要方便些。 a b c e f d 静态链表储存结构描述: typedef struct { datatype data; int parent; } ptree; ptree T[maxnode]; 数据域 指向父结点的 指针域 6.5.2 0 1 2 3 4 5 6 a b c d e f -1 0 1 1 1 2 2 下标 data parent ^ a b c d e f 2 3 4 5 6 1 2 3 4 5 6 ^ ^ ^ ^ ^ 再引入一个指向 父结点的指针域 2.孩子链表表示法 不采用多重链表。 较好的方法是:用一个结构数组储存树中的每个结点及指向该结点所属孩子的单链表的指针,另对每个结点的孩子结点用一个单链表,储存各结点在结构数组中的序号, 该方法已知某结点找父结点困难。 6.5.2 a b c e f d 储存结构描述: typedef struct cnode { int child; struct cnode *next; } link; typedef struct { datatype data; link *headptr; }ctree; ctree T[maxnode]; 数组元素类型描述 3.孩子兄弟链表表示法 在存储结点信息的同时,附加两个分别指向该结点最左孩子和右邻兄弟的指针域。该方法实际上是用二叉链表实现树的储存。 6.5.2 6.5.3 树和森林的遍历 树的遍历 1.前序遍历 先访问根结点,再前序遍历根的每一棵子树。 2.后序遍历 先后序遍历根的每一棵子树,再访问根。 3.层次遍历 先访问根结点 再依次访问第一层所有结点 再依次访问第二层所有结点·

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档