《数据结构A》第05章.pptVIP

  1. 1、本文档共145页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构A》第05章

数据结构 第5章 树 5.1?? 树的基本概念 5.2?? 二叉树 5.3?? 二叉树的遍历 5.5?? 树和森林 5.6?? 堆和优先权队列 5.7?? 哈夫曼树和哈夫曼编码 5.8?? 并查集和等价关系 5.1 树的基本概念 5.1.1 树的定义 定义5.1 树是包括n个结点的有限非空集合D,R是D中元素的序偶的集合,R满足以下特性: (1)有且仅有一个结点r?D,不存在任何结点v?D,v?r,使得v,r?R,称r为树的根 ; (2)除根r以外的所有结点u?D,都有且仅有一个结点v?D,v?u,使得v,u?R。 这样定义的树也称有根树,简称树。 5.1.2 基本术语 5.2 二叉树 5.2.1 二叉树的定义 5.2.2 二叉树的性质 5.2.3 二叉树ADT ADT BTree { 数据: 二叉树是结点的有限集合,它或者为空集合,或 者由一个根结点和两棵互不相交的左、右子二叉树组成。 运算: Create(); 构造一棵空二叉树。 Destroy():撤消一棵二叉树。 IsEmpty():若二叉树为空,则返回true,否则返回false。 Clear():移去所有结点,成为空二叉树。 5.2.4 二叉树的存储表示 完全二叉树的顺序表示 5.2.5 二叉树类 程序5.1 二叉树结点类 templateclass T struct BTNode { BTNode(){ lChild=rChild=NULL;} BTNode(const T x) { element=x; lChild=rChild=NULL; } 5.2.6 实现二叉树基本运算 程序5.3 部分二叉树运算 template class T bool BinaryTreeT::Root(T x)const { if(root){ x=root-element; return true; } else return false; } 5.3 二叉树遍历 5.3.1 二叉树遍历算法 遍历一个有限的结点集合,意味着对该集合中的每个结点访问且仅访问一次。 先序遍历 template class T void BinaryTreeT::PreOrder( void (*Visit)(T x)) { PreOrder(Visit,root); } 5.3.3? 二叉树遍历的应用实例 求二叉树的结点数 template class T int BinaryTreeT::Size() { return Size(root); } 练习: 有如下算法: template class T void BTreeT::A(BTNodeT *p) { BTNodeT *q; if (p) { A(p-lchild); A(p-rchild); q=p-lchild; p-lchild=p-rchild; p-rchild=q; } } (1) 该程序的作用。 (2) 对右图执行该算法,画出结果。 5.5 树和森林 (5.4 二叉树遍历的非递归算法) 5.5.1 森林与二叉树的转换 森林转换成二叉树:将森林中各树的根用线连起来,在树中,凡是兄弟用线连起来;去掉从双亲到除了第一个孩子以外的孩子的连线,只保留双亲到第一个孩子的连线;最后,使之稍微倾斜成习惯的二叉树形。其实,这里讨论的森林是指有序森林,也可将一般的森林视为有序森林来对待。 5.5.2 树和森林的存储表示 5.5.3 树和森林的遍历 按深度方向的遍历 由森林和二叉树的转换方法可知,森林中第一棵树的根即二叉树的根,第一棵树的子树组成的森林对应于二叉树的左子树,而除第一棵树外其余树组成的森林是二叉树的右子树,所以,对森林的先序遍历、中序遍历和后序遍历的结果应与对应二叉树的先序、中序和后序遍历的结果完全相同。 5.6 堆和优先权队列 优先权队列中的元素,按其优先级的高低而不是按元素进入队列的次序,来确定出队列的次序。 堆是一种很有用的数据结构,它可以用于高效地实现优先权队列。 5.6.1 堆 一个大小为n的堆是一棵包含n个结点的完全二叉树,该树中每个结点的关键字值大于等于其双亲结点的关键字值。完全二叉树的

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档