第6章 树和二叉树-96-3.ppt

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

第6章 树和二叉树;6.1 树的定义与基本术语;A; 树的定义与基本术语;A; (1). 树型图示 (2).嵌套集合 (3).凹入(书目) (4). 广义表(用根作为表的名字写在表的左边);线性结构;结点的度;双亲;有序树;树的结点数n和分支数b的关系是: b=n-1;任何一棵非空树是一个二元组 Tree = (root,F) 其中:root 被称为根结点 F 被称为子树森林;二叉树; 二叉树或为空树, 或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。;二叉树的五种基本形态:;用归纳法证明: 归纳基: 归纳假设: 归纳证明:;证明:;证明:;两类特殊的二叉树;满二叉树;满二叉树: 深度为 k 且含有2k-1个结点的二叉树。可从根起按层自上到下从左至右对结点连续编号。; 完全二叉树;对于完全二叉树,对其结点采用“按层编号”比较方便,即从根结点开始由上而下逐层给结点编号,同??层的结点由左向右编号。 对于完全二叉树中任一个编号为i的结点(1≤i≤n),它的父结点和左、右儿子结点的编号与i值有如下的关系: 1) 如果i=1,则它是整个树的根结点,无父结点;若i1,则其父结点编号为 。 2) 如果2i≤n,则其左儿子结点编号为2i;若2in,则无左儿子结点。 3) 如果(2i+1)≤n,则其右儿子结点编号为(2i+1);反之,则无右儿子结点。;完全二叉树: 树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应。; 性质 4 : 具有 n 个结点的完全二叉树的深度为 ? log2n? +1 。; 若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 ?i/2? 的结点为其双亲结点; (2) 若 2i≤n则编号为 2i 的结点为其左孩子结点, 否则,该结点无左孩子; (3) 若 2i+1 ≤ n则编号为2i+1 的结点为其右孩子, 否则,该结点无右孩子。 ; 用归纳法证明(2)(3)再导出(1) 对于 i=1 显然(2)(3) 成立。 对于 i1 ,分两种情况讨论: (1) 设第k (1≤k≤?log2n? )层第1个结点为 i,则 i=2k-1其左孩子必为第k+1层第1个结点,编号为2k =2i,若2in则无左孩子;其右孩子必为第k+1层第2个结点, 编号为2i+1,若2i+1n 则无右孩子。 (2) 设第k (1≤k≤?log2n? )层某个结点为i (2k-1≤i 2k ), 且2i+1≤n, 其左孩子为2i,右孩子为2i+1;则编号为i+1的结点为i 的右堂兄弟,若有左孩子编号必为2i+2=2(i+1),若有右孩子编号必为2i+3= 2(i+1)+1。 ;可用一维数组存储: bt[n] 顺序: 完全二叉树中将编号i的结点存在bt[i]中。 ;例如:;二、二叉树的链式存储表示;lchild data rchild;;一、问题的提出; “遍历”: 沿某条搜索路径巡访二叉树的结点, 使每个结点均被访问一次, 且仅被访问一次。; 二叉树是非线性结构, 每个结点有两个后继, 则存在按什么样的搜索路径遍历的问题。;二、先左后右的遍历算法; 若二叉树为空树,则空操作;否则, (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。; 若二叉树为空树,则空操作;否则, (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树。; 若二叉树为空树,则空操作;否则, (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。;a;三、算法的递归描述;2) 中序遍历 void InOrder(BiTree bt) /*中序遍历根指针为bt的二叉树*/ { if(bt!=NULL) { InOrder(bt-LChild); //遍历左子树 Visit(bt-data); //访问根结点 InOrder(bt-RChild); //遍历右子树 } } ;3) 后序遍历 void PostOrder(BiTree bt) /* 后序遍历根指针为bt的二叉树 */ { if(bt!=NULL) { PostOrder(bt-LChild); //遍历左子树 PostOrder(bt-RChild); //遍

文档评论(0)

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

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

1亿VIP精品文档

相关文档