数据结构第6章树与二叉树.ppt

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

数据结构(C语言版) 第6章 树与二叉树 本章主要知识点 树、二叉树的基本概念 二叉树的存储结构 二叉树的多种遍历方式 二叉树的线索化 最优二叉树哈夫曼树 树 1. 树的定义 树:n(n≥0)个结点的有限集合。n=0 时,称为空树。 任意一棵非空树满足以下条件: ⑴ 有且仅有一个特定的称为根(root)的结点; ⑵ 当n>1时,除根结点之外的其余结点被分成m(m0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为该根结点的子树。 2.树的表示法 树形表示法:用自然界倒长的树来表示,根在上,叶子在下; 集合表示法:用集合的形式来表示; 凹入表示法:类似于书的编目,不同长度代表了不同层次,相同长度代表相同层次; 3 基本术语 (1) 树的结点:由一个数据元素和若干指向其子树的分支组成。 (2) 结点的度:结点所拥有的子树的个数即分支数称为该结点的度。 (3) 叶子结点:度为0的结点称为叶子结点,或者称为终端结点。 (4) 分支结点:度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶子结点外,其余的都是分支结点。 (5) 孩子、双亲、兄弟:树中一个结点的子树的根结点称为这个结点的孩子;这个结点称为它孩子结点的双亲;具有同一个双亲的孩子结点互称为兄弟。 (6) 路径、路径长度:如果一棵树的一串结点n1,n2,…,nk有如下关系:结点ni是ni+1的父结点(1≤ik),就把n1,n2,…,nk称为一条由n1至nk的路径。路径长度是指路径上经过的边的数量,所以这条路径的长度是k-1。 (7) 祖先、子孙:在树中,如果有一条路径从结点M到结点N,那么M就称为N的祖先,而N称为M的子孙。 (8) 结点的层数:规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。 (9) 树的深度:树中所有结点的最大层数称为树的深度。 (10) 树的度:树中各结点度的最大值称为该树的度。 (11) 有序树、无序树:如果一棵树中结点的各子树从左到右是有次序的,不能交换的,称这棵树为有序树;反之,称为无序树。 (12) 森林:m (m≥0)棵互不相交的树的集合。 (13) 同构:对两棵树,若通过对结点适当重命名,就可以使这两棵树完全相等(结点对应相等,结点对应关系也相等),则称这两棵树同构。 (14) 层序编号:将树中结点按照从上层到下层、同层从左到右的次序依次给它们编以从1开始的连续自然数。 4 树的遍历 从根结点出发,按照某种次序依次访问树中所有结点,使得每个结点被访问一次且仅被访问一次。 树通常有前序(根)遍历、后序(根)遍历和层序(次)遍历三种方式。 (1) 前序(根)遍历 若树为空,则空操作返回;否则 a. 访问根结点; b. 按照从左到右的顺序以前序遍历方式遍历根结点的每一棵子树。 (2) 后序(根)遍历 若树为空,则空操作返回;否则 a. 按照从左到右的顺序以后序遍历方式遍历根结点的每一棵子树; b.访问根结点。 (3) 层序(次)遍历 从树的第一层(即根结点)开始,自上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。 5 树的存储结构 (1) 双亲表示法 用一维数组来存储树的各个结点(一般按层序存储),数组中的一个元素对应树中的一个结点,该元素包含结点的数据信息以及该结点的双亲在数组中的下标。 typrdef struct tnode { datatype data; int parent; }tree[n] (2) 孩子表示法 树中结点可能含有多个孩子,一般采用多重链表来表示,链表中的每个结点都包括一个数据域和多个指针域,每个指针域指向该结点的一个孩子结点。 a. 同构:按结点的度的最大值(即树的度)来设置指针域数量,即1个数据域和d(树的度)个指针域 b. 异构:按结点各自的度设置指针域数量,即结点有几棵子树就设几个指针。 为了综合上述结构存在的各种问题,把每个结点的孩子排列起来,形成单链表形式的孩子链表,n个结点共有 n 个孩子链表。每个孩子链表均有1个头指针,共有 n 个头指针,这 n 个头指针又可以组成一个顺序存储结构的线性表。将存放 n个头指针的数组和存放n个结点的数组结合起来,构成孩子链表的表头数组。 typrdef struct tagnode /*表结点*/ { int child; struct tagnode *next; }node, *link;

文档评论(0)

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

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

1亿VIP精品文档

相关文档