树和二叉树-云南民族大学数学与计算机科学学院.PPT

树和二叉树-云南民族大学数学与计算机科学学院.PPT

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

第六章 树和二叉树 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 6.1 树的定义和基本术语 定义 定义:树(tree)是n(n0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 特点: n=0叫空树 树中至少有一个结点——根 树中各子树是互不相交的集合 每个结点(根结点除外)有且仅有一个直接前驱,有0个或多个后继。 基本术语 结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支 结点的度(degree)——结点拥有的子树数 叶子(leaf)——度为0的结点 孩子(child)——结点子树的根称为该结点的孩子 双亲(parents)——孩子结点的上层结点叫该结点的~ 兄弟(sibling)——同一双亲的孩子 树的度——一棵树中最大的结点度数 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层…… 深度(depth)——树中结点的最大层次数 有序树——结点的子树从左至右有序 无序树 森林(forest)——m(m?0)棵互不相交的树的集合 树的抽象数据类型 树的基本操作:P118~119 树的建立和遍历——重点 树的表示 四种 P120 6.2 二叉树 一、定义 二叉树是n(n?0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成 特点 每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒(有序树) 基本形态 二、二叉树性质 性质1: 两种特殊形式的二叉树 满二叉树 定义: 性质 性质4: 证明:设完全二叉树的深度为k,则有 2k-1 - 1 n ? 2k - 1 2k-1 ? n 2k 取对数 k-1 ? log2n k 因为k为整数,所以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 三、二叉树的存储结构 顺序存储结构:将待存储二叉树的结点按满二叉树的结点层次编号,依编号次序将二叉树中的数据元素存放到一段地址连续的存储单元中。 链式存储结构 二叉链表 6.3 遍历二叉树 遍历二叉树(Traversing Binary Tree):按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。 遍历的结果:产生一个关于结点的线性序列。 二叉树 ? 线性表 (非线性结构) (线性结构) 设访问根结点记作 D 遍历根的左子树记作 L 遍历根的右子树记作 R 则可能的遍历次序有 先序 DLR DRL 中序 LDR RDL 后序 LRD RLD 遍历二叉树的非递归算法 先序遍历:算法1,将右子树根结点 入栈,(栈所需最大容量为n/2+1);算法2将根结点入栈 中序遍历:在遍历左子树之前,先把根结点入栈,当左子树遍历结束后,从栈中弹出,访问,再遍历右子树 后序遍历: 1)设定一个指针,指向 最近访问过的结点。在退栈取出根结点时,需判断:若根结点的右子树为空,或它的右子树非空,但已遍历完毕,即它的右子树根结点恰好是最近一次访问过的结点时,应该遍历该根结点。反之,该根结点应重新入栈,先遍历它的右子树。 2)还可同时设定一个标记,指示该根结点是第一次还是第二次入栈 由二叉树的先序序列和中序序列可唯一地确定一棵二叉树。例, 先序序列 { ABHFDECKG } 和中序序列 { HBDFAEKCG }, 构造二叉树过程如下: 遍历算法应用——二叉树的显示输出 void PrintBiTree(BiTree T,int n) { int i; char ch= ; if (T) { PrintBiTree(T-rchild,n+1); for (i=1;i=n;++i) {printf(%5c,ch);} printf(%c\n, T

文档评论(0)

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

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

1亿VIP精品文档

相关文档