- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中序遍历下面的二叉排序树
第七章 二叉树及其应用 7.1 二叉树的基本概念 7.2 二叉树的存储结构 7.3 二叉树的遍历算法 7.4 线索二叉树* 7.5 二叉树的应用1——基本算法 7.6 二叉树的算法2——哈夫曼树* 7.7 二叉树的应用3——二叉树排序 7.8 二叉树的应用4——堆和堆排序 7.1二叉树的概念 7.1.1什么是二叉树 7.1.2特殊的二叉树 7.1.3二叉树的性质 二叉树的定义 二叉树是由n( )个结点组成的有限集 合,其: 1)当n=0时为空树; 2)当n0时,有且仅有一个特定的结点,称为二叉树的根,其余结点可分为2个互不相交的子集,其中每一个子集又是一棵二叉树,分别称为左子树和右子树 二叉树的形态 二叉树的基本术语 父结点:若一个结点有子树,则该结点为父结点(也称双亲结点)。 孩子结点:若某结点有左子树,则其左子树的根为该结点的左孩子;若其有右子树,则其右子树的根为该结点的右孩子。 兄弟结点:同一个结点的孩子。 延伸父子关系可以得到祖先结点和后结点关系。 层次:根结点的层次为1,其余结点的层次是其父结点的层次加1。 高度(深度):二叉树中结点的最大层数。 该二叉树的深度为4; 度:一个结点的孩子数目是这个结点的度。 叶子结点:度为0的结点。 二叉树的度:二叉树中结点的最大的度。 注意:对于结点数1的二叉树,有且仅有一个结点为二叉树的根,其余结点均为孩子结点,且有左右之分—左孩子、右孩子。 例:具有三个结点的二叉树 总结:二叉树的逻辑结构 (1)二叉树中任一结点(除根结点外)只有一个父结点; (2)二叉树中任一结点(除叶子结点外)最多有2个孩子结点; (3)结点间为非线性关系。 7.1.2特殊的二叉树 满二叉树 定义:满二叉树是满足如下条件的二叉树:(1)任一非叶子结点均有两个孩子; (2)对于二叉树的任一层,若该层上有一个结点孩子,则该层上所有结点均有孩子。 特点:满二叉树的每层都有最大结点数。 问题:可不可以说,所有非叶子结点均有两个孩子的二叉树为满二叉树? 完全二叉树 定义:在满二叉树的最下层从右到左连续地删除若干个结点所得到的二叉树。 特点:(1)叶子结点只可能在层次最大的两层上出现; (2)满二叉树比为完全二叉树,而完全二叉树一定是满二叉树。 例:满二叉树和完全二叉树 因为二叉树中每个结点的度最大为2, 则第k+1层的结点总数最多为第k层上结点最大数的2倍,即2* = 故结论成立。 深度为k的满二叉树有 个结点;或者说,深度为k且有 个结点的二叉树为满二叉树。 性质5:若对满二叉树或完全二叉树按照“从上到下,每层从左到右,根结点编号为1”的方式编号,则编号为 i 的结点,它的两个孩子结点的编号分别为 2i 和 2i +1,它的父结点的编号为 i /2 。 思考题: 有100个结点的完全二叉树有多少个叶子结点? 解: 第100个结点的编号为100,其父结点的编号为50,且其父结点的右兄弟(编号为51)没有孩子,即为叶子;所以,叶子结点的编号从51至100,叶子结点有50个。 7.2 二叉树的存储 7.2.1 二叉树的顺序存储 7.2.2 二叉树的链接存储 7.2.3 二叉树的建立 7.2.1 二叉树的顺序存储 顺序存储 将一棵二叉树中的结点,按它们在完全二叉树中的编号顺序,依次存储在一维数组bt[n+1]中;即编号为 i 的结点存储在数组中下标为 i 的元素中。 这样,根据性质5可知编号为 i 的结点,其左孩子下标为2i ,其右孩子下标为2i +1,其父结点的下标为i/2。 例:如下二叉树的顺序存储。 二叉树顺序存储的特点: ① 结点间关系蕴含在其存储位置中,无需附加任何信息就能在这种顺序存储结构里找到每个结点的双亲和孩子。 ② 浪费空间,适于存储满二叉树和完全二叉树。 7.2.2 二叉树的链接存储 二叉链表 对于任意的二叉树来说,每个结点只有两个孩子,一个双亲结点。我们可以设计每个结点至少包括三个域:数据域、 左孩子域和右孩子: 其中,lchild域指向该结点的左孩子,data域记录该结点的信息,rchild域指向该结点的右孩子。 结点类型描述为: typedef struct node { datatype data
文档评论(0)