- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
商户据结构 树与二叉树.ppt
第六章 树和二叉树 6.1 树的逻辑结构和基本操作 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 哈夫曼树及其应用 6.6.1 最优二叉树(哈夫曼树) 6.6.2 赫夫曼编码 树是一类重要的非线性数据结构 6.1 树的定义和基本术语 一、定义 定义:树(tree)是n(n=0)个结点的有限集T,在任意的非空树中 (1)有且仅有一个称为根的结点,无前驱。 (2)当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 特点: 树中最多只有一个根结点 树中各子树是互不相交的集合 基本术语 结点(node)——包含一个数据元素及描述与其他几点关系的信息(如前驱、后继指针) 结点的度(degree)——结点的后继的个数 树的度——一棵树中最大的结点度数 叶子(leaf)——度为0的结点,终端结点 孩子(child)——一个结点的后继称为该结点的孩子 双亲(parents)——一个结点的前驱成为该结点的双亲 兄弟(sibling)——同一双亲的孩子 结点的层次(level)——从根结点算起,根为第1层,它的孩子为第2层…… 深度(depth)——树中结点的最大层次数 有序树——树中结点的各子树看成从左至右是有次序的(即不能互换);否则称无序树 森林(forest)——m(m?0)棵互不相交的树的集合 6.2 二叉树 二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。 6.2.1 二叉树的定义 定义:二叉树是由n(n=0)个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。 这也是一个递归定义。二叉树可以是空集合,根可以有空的左子树或空的右子树。 特点 每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒 6.2.2 二叉树性质 性质1: 满二叉树: 一棵深度为k且由2k-1个结点的二叉树。 下图就是一棵满二叉树,对结点进行了顺序编号 完全二叉树的特点是: (1)所有的叶结点都出现在第k层或k-1层。 (2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+1。 性质5 如果一棵有n个结点的完全二叉树(其深度为 log n +1)的 结点按层编号,则对任一结点i(1 ≤ i ≤ n),有 如果i =1,则结点i是二叉树的根,无双亲;如果 i1,则其双亲PARENT(i)结点是 i/ 2 如果2in,则结点i无左孩子结点;否则其左孩子结点 LCHILD(i)的编号为2i。 3)如果2i +1n ,则结点i无右孩子结点;否则其右孩子结点RCHILD(i)的编号为2i+1。 一般二叉树 2.链式存储结构 二叉链表 6.3 遍历二叉树和线索二叉树 递归算法 先序遍历为例 void PreorderTraverse(BiTree root) { if(root!=NULL) { visit(root); PreorderTraverse(root-lchild); PreorderTraverse(root-rchild); } } 练习:用递归方法遍历二叉树 6.4 树和森林 6.4.1 树的存储结构 双亲表示法 实现:定义结构数组存放树的结点,每个结点含两个域: 数据域:存放结点本身信息 双亲域:指示本结点的双亲结点在数组中位置 孩子表示法 多重链表:每个结点有多个指针域,分别指向其子树的根 结点同构:结点的指针个数相等,为树的度D 孩子兄弟表示法(二叉树表示法) 实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点 6.4.2 森林与二叉树的转换 树与二叉树转换 森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构 6.4.3 树和森林的遍历 树的遍历 常用方法 先根(序)遍历:先访问树的根结点,然后依次先根遍历根的每棵子树 后根(序)遍历:先依次后根遍历每棵子树,然后访问根结点 2、森林遍历的常用方法 先序遍历:先访问第一棵树的根结点,然后依次先序遍历根结点的子树森林,先序遍历剩余子树森林 中序遍历
原创力文档


文档评论(0)