(六)树与二叉树

1.树的基本概念

树是一种简单的非线性结构。在树结构中,数据元素之间有着明显的层次结构。在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件。

在树结构中,每一个结点只有一个前件,称为父结点。如A即为结点B、C、D的父结点。

没有父结点的结点只有一个,称为根结点。如上图所示,结点A即为根结点。

每一个结点可以有多个后件,它们均称为该结点的子结点。如结点G、H、I是结点D的子结点。

没有后件的结点,称为叶子结点。上图中,叶子结点有:J、M、N、L、C、G、H、I。

在树结构中,一个结点所拥有的后件结点个数称为该结点的度。例如,结点D的度为3,结点E的度为1等,按此原则,所有叶子结点的度均为0。

在树中,所有结点中的度称为该树的度。上图所示的树中,所有结点中的度是3,所以该树的度为3。

树分层,根结点为第一层,往下依次类推。同一层结点的所有子结点均在下一层。如上图:A结点在第1层,B、C、D结点在第2层;E、F、G、H、I在第3层;J、K、L在第4层;M、N在第5层。

树的层次称为树的深度。上图树的深度为5。

在树中,某结点的一个子结点为根构成的树称作该结点的子树。叶子结点没有子树。

在计算机中,可以用树来表示算术表达式。原则如下:

(1)表达式中每一个运算符在树中对应一个结点,称为运算符结点

(2)运算符的每一个运算对象在树中为该运算符结点的子树(在树中的顺序为从左到右)

(3)运算对象中的单变量均为叶子结点

树在计算机中用多重链表表示。多重链表中的每个结点描述了树中对应结点的信息,而每个结点中的链域(即指针域)个数将随着树中该结点的度而定义。

如果在树中,每一个结点的子结点的个数不相同,因此在多重链中各结点的链域个数也不相同,会导致算法太复杂。因此,在树中,常采用定长结点来表示树中的每一个结点,即取树的度作为每个结点的链域的个数。这样,管理相对简化了,但会造成空间的浪费,因为有许多的结点存在空链域。

2.二叉树及其基本性质

1)二叉树的定义

二叉树的特点:

非空二叉树只有一个根结点

每一个结点最多只有两个子结点,且结点分左右。则一个结点最多可以有两棵子树,分别称为左子树和右子树

在二叉树中,每一个结点的度为2,即二叉树的度为2。在二叉树中,任何的子树也均为二叉树。

在二叉树中,每一个结点的子树被分为左子树和右子树。在二叉树中,允许某一个结点只有左子树或只有右子树。如果一个结点既没有左子树,也没有右子树,则该结点为叶子结点。

2)二叉树的性质

性质1:在二叉树的第k层上,最多有2k-1(k≥1)个结点。

性质2:深度为m的二叉树最多有2m-1个结点。

性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总比度为2的结点多一个。

性质4:具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示log2n的整数部分。

3)满二叉树与完全二叉树

(1)满二叉树

满二叉树的特点:

除最后一层外,每一层上的所有结点都有两个子结点。即在满二叉树中,每一层上的结点数都达到值,即在满二叉树上的第k层上有2k-1个结点。如下即为一棵满二叉树。

(2)完全二叉树

特点:除最后一层外,每一层上的结点数均达到值,在最后一层上只缺少右边的若干个结点。

即如果从根结点开始,对二叉树的结点自上而下、自左而右用自然数进行连续编号,则深度为m、且有n个结点的二叉树,当且仅当其每一个结点都与深度为m的满二叉树中编号从1到n的结点一一对应,则是完全二叉树。

对于完全二叉树,叶子结点只能在层次的两层中出现;对于任何一个结点,若其右分支下的子树结点的层次为p,则其分支下的子孙结点的层次为p或p+1。

完全二叉树具有的性质:

性质5:具有n个结点的完全二叉树的深度为[log2n]+1

性质6:设完全二叉树共有n个结点。如果从根结点开始,按层次(每一层从左到右)用自然数1、2……、n给结点编号,对于编号为k(k=1,2,……n)的结点有如下结论:

① 若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2)。

② 若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(当然也没有右子结点)

③ 若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。

3.二叉树的存储结构

二叉树的存储常采用链式存储结构。

存储二叉树中各元素的存储结点由两个部分组成:数据域和指针域。在二叉树中,由于每个结点可有两个子结点,则它的指针域有两个:一个用于存储该结点的左子结点的存储地址,即称为左指针域;一个用于存储指向该结点的右子结点的存储地址,称为右指针域。

存储结构如下:

即二叉树的存储结构中每一个存储结点都有两个指针域,因此,二叉树的链式存储结构也称为二叉树的链表。在二叉树在存储中,用一个头指针指向二叉树的根结点的存储地址。

如图所示的二叉树:

如果我们将该二叉树的所有结点顺序编号,顺序存放在存储空间里,则它们在内存空间中的存放方式是:

当然,对于满二叉树或完全二叉树而言,也可采用顺序存储的方式,但顺序存储的方式不适合其他的二叉树。

4.二叉树的遍历

二叉树的遍历即是不重复地访问二叉树的所有结点。

在遍历二叉树时,一般先遍历左子树,然后再遍历右子树。在先左后右的原则下,二叉树的遍历又可分为三种:前序遍历、中序遍历和后序遍历。

1)前序遍历

前序遍历即先访问根结点,然后遍历左子树,最后遍历右子树。在遍历左子树和遍历右子树时,依然是先遍历根结点,然后是左子树,再是右子树。

操作的具体方式:

若二叉树为空,则结束返回。

否则:访问根结点前序遍历左子树前序遍历右子树

如上图所示的完全二叉树,它的前序遍历结果是:A、B、D、H、P、Q、I、R、E、J、K、C、F、L、M、G、N、O

2)中序遍历

中序遍历,即先遍历左子树,然后访问根结点,最后是遍历右子树。

具体的操作方式:

若二叉树为空,则结束返回。

否则:中序遍历左子树访问根结点 中序遍历右子树

这里强调,在遍历左子树和右子树时,仍然要采用中序遍历的方法。

如上图所示的完全二叉树,它的中序遍历结果是:P、H、Q、D、R、I、B、J、E、K、A、L、F、M、C、N、G、O

3)后序遍历

后序遍历,即选遍历左子树,然后是遍历右子树,最后访问根结点。

具体的操作方式:

若二叉树为空,则结束返回。

否则:前序遍历左子树前序遍历右子树访问根结点

如上图所示的完全二叉树,它的后序遍历结果是:P、Q、H、R、I、D、J、K、E、B、L、M、F、N、O、G、C、A

2017年计算机二级公共基础知识学习教程:树与二叉树.doc

下载Word文档到电脑,方便收藏和打印[全文共3006字]

编辑推荐:

下载Word文档

计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...相关推荐

  1. 计算机二级数据模型三要素,2017年计算机二级公共基础知识重点讲解:数据模型...

    4.2 数据模型 数据模型的概念:是数据特征的抽象,从抽象层次上描述了系统的静态特征.动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架.描述了数据结构.数据操作及数据约束. E-R模型 ...

  2. 计算机专业技能知识,2017年度计算机专业技能知识资料基础知识资料试题'及其答案...

    2017年度计算机专业技能知识资料基础知识资料试题'及其答案 (19页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 ''第一部分   一 ...

  3. 计算机技术基础概念,2017年计算机三级网络技术基本概念与名词解释:计算机基础知识部分...

    计算机基础知识部分 1. 计算机系统发展历程:电子管计算机.晶体管计算机.集成电路计算机.大规模及超大规模集成电路计算机. 2. 电子计算机时代开始的标志:以美国1945年生产.1946年2月交付使用 ...

  4. 高中计算机一级基础知识,2017全国计算机一级MS Office考证常考知识点-高中课件精选.doc...

    2017全国计算机一级MS Office考证常考知识点-高中课件精选.doc 高考 高中教育 2017年计算机一级考试MSOffice高频考点(1) 计算机的发展.类型及其应用领域 1. 计算机(co ...

  5. 计算机考试c++语言程序设计,2017年全国二级计算机C++语言程序设计考试大纲

    "2017年全国二级计算机C++语言程序设计考试大纲"一文由出国留学网计算机等级考试栏目整理,希望可以帮到广大考生,如果您还想了解更多相关详情,请继续关注我们网站的更新,我们将竭诚 ...

  6. 2017年计算机a级模拟试题,2017年计算机国考(二级Access)全真模拟试题及答案【手机题库】...

    &nbsp&nbsp[导读]: 2017年计算机国考(二级Access)全真模拟试题及答案,更多 计算机国考模拟试题.考试内容.考试报名.报考条件和历年真题,请访问计算机等级考试网(h ...

  7. 计算机二级access通过技巧,2017年计算机二级Access应试技巧

    2017年计算机二级Access应试技巧 (4)排序查询的结果. 四.窗体的基本操作 1.窗体分类 (1)纵栏式窗体. (2)表格式窗体. (3)主体窗体. (4)数据表窗体. (5)图表窗体. (6 ...

  8. 计算机二级上传不了照片,2017全国计算机二级考试报名须知:上传电子照片

    原标题:2017全国计算机二级考试报名须知:上传电子照片 2017下半年计算机二级报名预计在2017年6月举行,每年都会有部分考生由于对报考流程的不了解,造成报名失败,为了防止此类事情的发生,节约大家 ...

  9. 2017计算机一级理论知识,2017全国计算机等级考试一级WPSOffice考试大纲

    2017全国计算机等级考试一级WPS Office考试大纲使用2013版 全国计算机等级考试一级 WPS Office考试大纲(2013年版) 基本要求 1.具有微型计算机的基础知识(包括计算机病毒的 ...

最新文章

  1. android手机装windows,安卓手机上运行WindowsXP系统图文教程
  2. JQ_Web Uploader图片上传控件
  3. 导师推荐的学术前沿号
  4. 10_史上最全的Markdown使用教程(没有之一)(20190115)
  5. PHP Date()函数详细参数
  6. 这是霄哥的天气预报,屌不屌?
  7. java File类 打印目录树状结构(递归)
  8. Java中lombok @Builder注解使用详解
  9. 一个类可以实现多个接口吗_Java入门:基础知识(面向对象:接口)
  10. vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader
  11. 院士建议:多关注千千万万没有任何“帽子”的青年科技工作者
  12. 携程初赛 携程全球数据中心建设 球面上两点的最短距离 + 最小生成树
  13. redux-form(V7.4.2)笔记( 五)核心模块回顾
  14. 行泊ADAS摄像头前装搭载同比增长54.15%,TOP10供应商领跑
  15. 扫描版PDF转文字Word(python3)
  16. 基于计算机视觉的裂纹检测方案
  17. 译:谷歌OKR指导手册(全文)
  18. Win10 解决CSDN、阿里云国内站、小米商城国内站等国内网站打不开的问题(超详细教程)
  19. 周围剃光头顶留长发型_四周都剃光,头顶留在发的那叫什么发型
  20. 免费Word简历+PPT模板下载网站

热门文章

  1. 深入浅出百亿请求高可用Redis(codis)分布式集群揭秘
  2. AAC音频裸码流时间戳与时间长度的关系
  3. Apache Hadoop 3.0.0 GA版正式发布,可以部署到线上
  4. go get github.com/tealeg/xlsx timeout 超时
  5. 将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中
  6. Java位操作:如何将long类型的指定位设置为0或1?How to set/unset a bit at specific position of a long?
  7. 牛客网_PAT乙级_1019. 数字黑洞 (20)
  8. 浅谈RDMA流控设计
  9. Spring Cloud Config入门(本地配置)
  10. Redis的哨兵机制 或者心跳机制 模式 原理详解