网站大量收购独家精品文档,联系QQ:2885784924

数据算法—— 树与二叉树.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据算法—— 树与二叉树

第7章 树和二叉树 7.1 树 7.1 树 基本术语 结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支 结点的度(degree)——结点拥有的子树数 叶子(leaf)——度为0的结点,又叫终端结点 孩子(child)——结点子树的根称为该结点的孩子 双亲(parents)——孩子结点的上层结点叫该结点的~ 树的度——一棵树中最大的结点度数 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层…… 深度(depth)——树中结点的最大层次数 有序树、无序树 如果树中每棵子树从左向右的排列拥 有一定的顺序,不得互换,则称为有序树,否则称为无序树。 森林 是m(m≥0)棵互不相交的树的集合。 在树结构中,结点之间的关系又可以用家族关系描述,定义如下: 孩子、双亲 结点子树的根称为这个结点的孩子,而这个结点又被称为孩子的双亲。 子孙 以某结点为根的子树中的所有结点都被称为是该结点的子孙。 祖先 从根结点到该结点路径上的所有结点。 兄弟 同一个双亲的孩子之间互为兄弟。 堂兄弟 双亲在同一层的结点互为堂兄弟。 2. 树的基本运算 常用操作: (1) Initiate(t)初始化一棵空树t。 (2) Root(x)求结点x所在树的根结点。 (3) Parent(t,x)求树t中结点x的双亲结点。 (4) Child(t,x,i)求树t中结点x的第i个孩子结点。 (5) RightSibling(t,x)求树t中结点x的第一个右边兄弟结点。 (6) Insert(t,x,i,s)把以s为根结点的树插入到树t中作为结点x的第i棵子树。 (7) Delete(t,x,i)在树t中删除结点x的第i棵子树。 (8) Traverse(t)是树的遍历操作 7.2 二叉树 图 7-6 二叉树的5种形态: 二叉树性质 性质1: 特殊形式的二叉树 满二叉树 定义: 【性质4】 具有n个结点的完全二叉树的深度为 ?log2n?+1。其中,?log2n? 的结果是不大于log2n的最大整数。 证明:假设具有n个结点的完全二叉树的深度为K,则根据性质2可以得出: 2K-1-1n≤2K-1 将不等式两端加1得到: 2K-1≤n2K 将不等式中的三项同取以2为底的对数,并经过化简后得到: K-1≤log2nK 由此可以得到:?log2n? =K-1。整理后得到:K= ?log2n?+1。 【性质5】:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1?i?n),有: (1) 如果i=1,则结点i是二叉树的根,无双 亲;如果i1,则其双亲是?i/2? (2)如果2in,则结点i无左孩子;如果2i?n,则其左孩子是2i (3) 如果2i+1n,则结点i无右孩子;如果2i+1?n,则其右孩子是2i+1 2. 二叉树的基本运算 (1) Initiate(bt)建立一棵空树。 (2)Create(x,lbt,rbt)生成一棵以x为根结点的数据域信息,以二叉树lbt和rbt为左子树和右子树的二叉树。 (3)InsertL(bt,x,parent)将数据域信息为x的结点插入到二叉树bt中作为结点parent的左孩子结点。如果结点parent原来有左孩子结点,则将结点parent原来的左孩子结点作为结点x的左孩子结点。 图 7-11 7.2.3 链式存储结构 在顺序存储结构中,利用编号表示元素的位置及元素之间孩子或双亲的关系,因此对于非完全二叉树,需要将空缺的位置用特定的符号填补,若空缺结点较多,势必造成空间利用率的下降。在这种情况下,就应该考虑使用链式存储结构。 常见的二叉树结点结构如下所示: 其中,Lchild和Rchild是分别指向该结点左孩子和右孩子的指针,data是数据元素的内容。在C语言中的类型定义为: typedef struct BTNode { char data; struct BTNode *lchild,*rchild; /*左右孩子指针*/ }BTNode,*BTree; 下面是一棵二叉树及相应的链式存储结构。 图 7-14 这种存储结构的特点是寻找孩子结点容易,双亲比较困难。因此,若需要频繁地寻找双亲,可以给每个结点添加一个指向双亲结点的指针域,其结点结构如下所示。 7.2.4 遍历二叉树 二叉树是一种非线性的数据结构,在对它进行操作时,总是需要逐一对每个数据元素实施操作,这样就存在一个操作顺序问题,由此提出了二叉树的遍历操作。所谓遍历二叉树就是按某种顺序访问二叉树中的每个结

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档