C语言与数据结构课件.ppt

  1. 1、本文档共485页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
满二叉树:每个非叶结点都有两棵非空子树 完全二叉树:每层结点都满,只有最下一层右边可缺 8.3.2 二叉树的一些性质 性质1. 在非空二叉树第i 层上至多有2i 个结点(i≥0)。 性质2. 深度为k 的二叉树至多有2k+1-1 个结点(k ≥ 0)。 性质3. 对任何非空二叉树T,如果叶结点个数为n0,度为2 的 结点个数为n2,则n0 = n2 + 1。 性质4. n 个结点的完全二叉树的深度k 为log2n . 性质5. (完全二叉树)如果n 个结点的完全二叉树按层次序从1 开始编号,对任一结点i(1 ≤ i≤n) 都有: 1. 序号1的结点是根;i 1时其双亲结点是∟ i/2 」 。 2. 如果2i ≤n,其左子女结点序号为2i。否则无左子女。 3. 如果2i+1 ≤ n,其右子女结点序号为2i+1; 否则没有右子女。 A B C D E F G A B C D E F G H 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 如果完全二叉树中的结点从0 开始编号,也有类似性质: 1. 序号0 的结点为根; 2. 非根结点i 的父结点编号是∟ (i – 1)/2 」 ; 3. 结点的两个子结点(若存在)的编号分别为2i+1和2i+2。 完全二叉树的信息可以方便地存入一系列连续位置中。 8.3.3 二叉树的基本运算 ? 创建一棵空二叉树; ? 判断二叉树是否为空; ? 求二叉树的根结点,若为空,则返回一特殊值; ? 求二叉树中某个指定结点的父结点,当指定结点为根时, 返回一特殊值; ? 求二叉树中某个指定结点的左子女结点,当指定结点没有 左子女时,返回一特殊值; ? 求二叉树中某个指定结点的右子女结点,当指定结点没有 右子女时,返回一特殊值; ? 二叉树的周游。 8.3.4 二叉树的周游 二叉树的周游(Traversing,遍历):按某种顺序访问二 叉树中所有结点,每个结点访问一次且仅一次。 三种基本方式: 先根次序(DLR) 对称序(LDR) 后根次序(LRD) 先根次序 A B D C E G F H I 后根次序 D B G E H I F C A 对称序(中根次序) D B A E G C H F I 二叉树的周游算法 /* 二叉树的先根序(先序)周游*/ void preOrder( BNode p) { if (p==NULL) return; visit(p); preOrder(leftChild(p)); preOrder(rightChild(p)); } /* 二叉树的中根序(中序)周游*/ void inOrder(BNode p) { if (p == NULL) return; inOrder(leftChild (p)); visit(p); inOrder(rightChild (p)); } /* 二叉树的后根序(后序)周游*/ void postOrder(BNode p) { if (p == NULL) return; postOrder(leftChild (p)); postOrder(rightChild (p)); visit(p); } 8.3.5 树、树林与二叉树的转换 树、树林转换为二叉树。步骤: 1. 在所有相邻的兄弟结点之间连一条线; 2. 对每个非终端结点,只保留它到其最左子女的连 线,删去它与其它子女的连线; 3. 以根结点为轴心,旋转整棵树。 二叉树转换为树、树林。步骤: 1. 若某结点是其父母的左子女,则把该结点的右子女, 右子女的右子女,…都与该结点的父母连线; 2. 去掉原二叉树中所有父母到右子女的连线。 8.4 二叉树的存储表示 8.4.1 顺序表示 8.4.2 链接表示 8.4.3 二叉树的生成 树的递归定义: 树是n (n≥0) 个结点的有限集T。当T非空时,满足: 1. 有且仅有一个特别标出的称为根的结点r; 2. 除根结点外,其余结点可分为m(m = 0)个互不相交非空的有限集T1, T2, …, Tm,其中每一个集合本身又是一棵非空树,称为根r 的子树(subtree)。 空树:结点数为0 的树。 树可以没有子树(m = 0) 8.1.2 基本术语     (a) 树t            (b) 树t 有序树和无序树:树中的子树的顺序是否重要 父结点,子结点,边 兄弟结点 祖先,子孙 路径,路径长度 结点的层数(根的层为0) 深度或高度(结点的最大层数) 结点的度数、树的度数 树叶、分支结点 结点的次序(最左,…) 8.1.3 树林 树林:m(m≥0)棵互不相交的树的集合 一棵非空树是二元组Tree = (root, F) , 其中

文档评论(0)

爱遛弯的张先生 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档