计算机软件技术基础 教学课件 ppt 作者 牟艳 陈慧萍 第4章 树形结构.ppt

计算机软件技术基础 教学课件 ppt 作者 牟艳 陈慧萍 第4章 树形结构.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 树形结构 本章基本内容与要求 基本内容 树的基本概念及存储结构 二叉树概念 二叉树的存储结构 二叉树的操作 二叉排序树 哈夫曼树 要求:掌握上述所有内容 第一节 树的基本概念及存储结构 第四节 二叉树的操作 4.2.2 二叉树遍历算法的实现 4.3 二叉树的创建---采用先序方法建树 4.4 二叉树基本应用的算法实现 第五节 二叉排序树 对任意的一组数据元素{X1,X2,……Xn},要生成一棵二叉排序树的过程为: 1)令X1为二叉排序树的根节点。 2)若X2<X1,则X2为X1的左子树的根节点;否则,X2为X1的右子树的根节点。 3)X3,......,Xn节点的插入方法同上。 bitree *InsertTree (bitree *q,int a) { IF (Q==NULL) //生成一个新结点,数值域为a { q= new bitree; q->data=a; q->lchild= NULL; q->rchild= NULL; } else if (a< q->data ) { q->lchild= InsertTree (q->lchild,a); } //插入左子树 else { q->rchild= InsertTree (q->rchild,a); } //插入右子树 return q; } 5.3 二叉排序树的查找 假设需要在二叉排序树上查找关键值为k的元素,先从根开始。如果根为空,那么二叉排序树不包含任何元素,查找失败,否则,将k与根的关键值相比较,如果k小于根节点的关键值,那么就不必搜索右子树中的元素,只要在左子树中查找即可。如果k大于根节点的关键值,则正好相反,只需在右子树中查找即可。如果k等于根节点的关键值,则查找成功,搜索终止。下面的程序为二叉排序树的查找算法。该过程的时间复杂性为O(h),其中h是树的高度。 bitree *Search(bitree *q, int a) //在q所指向的二叉排序树中查找值为a的结点 { IF(Q==NULL) cout<<”无此节点\n”; else if(a== q->data) cout<<”查找成功\n”; else if (a< q->data ) //继续在左子树中查找 Search(q->lchild, a); else Search(q->rchild, a); //继续在右子树中查找 } 5.4 删除二叉排序树上的结点 删除二叉排序树上的一个结点,也就是要在已排好序的序列中删除一个元素,因此要求删除一个结点以后的二叉树仍是二叉排序树。假设要删除的结点指针为P,则有四种情况需要考虑: 1)*P是叶子 (参见图4-15a)直接删除*P,即将*P的双亲*parent中指向*P的指针域置空即可; 2)*P只有一个孩子 即左右子树有一为空(参见图4-15b),其中PL表示*P的左子树),此时只需将PL的根结点和*P的双亲直接连接就可删去*p; 3)*P为树根节点 删除后应修改树根节点指针; 4)*P有两个孩子 (参见图4-15c)其中CL表示C结点的左子树,PR表示P结点的右子树,其余类推),则将操作转换成删除*P结点的中序前驱,在删去它之前把这个结点的数据复制到原来要删的结点位置上就完成了删除。方法如下: 以图4-15c为例,循着*P的左子树的根结点C向右一直找到结点S(S最大),要求S的右子树为空.然后将S的左子树改为结点Q的右子树,将S结点的数据域值取代P结点的数据域值。完成删除的二叉排序树如图4-15d所示。 5.6 哈夫曼树 2. 树的带权路径长度 权 某结点被赋予的一个实数(这在实际应用中是有某种意义的,比如使用率,数值等)。 结点的带权路径长度 从该结点到树根之间的路径长度×该结点上的权值。 树的带权路径长度(WPL) 树中叶子结点的带权路径长度之和: 其中,n为叶子节点数目,wk为树中每个叶子结点的权值,lk为每个叶子到根结点的路径长度。 3. 哈夫曼树的定义 如图,每棵树都有7个节点,但其WPL不同。 5.6.2 哈夫曼树的构造 假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1,w2,…,wn,则哈夫曼树的构造规则为: (1) 将w1,w2,…,wn看成是有n 棵树的森林(每棵树仅有一个结点); 例:要传输的电文是{CAS;CAT;SAT;

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档