




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二叉树的
存储与基本操作
本讲要点二叉树的存储
二叉树的基本操作问题如何表示(抽象)逻辑结构如何存储?物理结构如何操作?操作算法1.二叉树的存储二叉树的顺序存储结构用一维数组存储二叉树中的结点,并且结点的存储位置(下标)应能体现结点之间的逻辑关系——父子关系。如何利用数组下标来反映结点之间的逻辑关系?二叉树的性质5为二叉树的顺序存储指明了存储规则:依照完全二叉树的结点编号次序,依次存放各个结点。完全二叉树和满二叉树中结点的序号可以唯一地反映出结点之间的逻辑关系。注意:C/C++中数组的起始地址为0,编号为i的结点存储在下标为i的单元内。1.二叉树的存储二叉树的顺序存储结构对于一般二叉树而言,如何利用完全二叉树的编码规则来存储数据呢?ABCDEGFABC∧DE∧∧∧F∧∧G数组下标12345678910111213以编号为下标ABCDEGF123561013按照完全二叉树编号1.二叉树的存储二叉树的顺序存储结构优点?对于满二叉树、完全二叉树来说,顺序存储结构的存储效率极高。所有的空间仅仅用来存储数据元素的值,结点之间关系的存储未占用任何空间。可以直接存取二叉树中的任意结点的数据信息,且双亲与孩子关系计算也非常简单。由于每个数据元素的存储位置暗藏彼此之间的关系,可以根据结点的编号,直接计算出它的父结点、左/右孩子结点的位置。1.二叉树的存储二叉树的顺序存储结构缺点?一棵斜树的顺序存储会怎样呢?高度为k的右斜树,k个结点需分配2k-1个存储单元。一棵二叉树改造后成完全二叉树形态,需增加很多空结点,造成存储空间的浪费。二叉树的顺序存储结构一般仅存储完全二叉树ABC137D151.二叉树的存储二叉树的链式存储结构基本思想:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针。1.二叉树的存储二叉树的链式存储结构结点结构:
lchild
data
rchild其中,data:数据域,存放该结点的数据信息;lchild:左指针域,存放指向左孩子的指针;rchild:右指针域,存放指向右孩子的指针。1.二叉树的存储二叉树的链式存储结构具有n个结点的二叉链表中,有多少个空指针?2.二叉树的基本操作二叉树的遍历二叉树的建立二叉树的销毁2.二叉树的基本操作(1)二叉树的遍历从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。如果限定先左后右,则遍历方式有三种:先序:DLR中序:LDR后序:LRD层序遍历:按二叉树的层序编号的次序访问各结点。考虑二叉树的组成:根结点D左子树L右子树R二叉树什么次序?二叉树遍历操作的结果非线性结构线性化2.二叉树的基本操作(1)二叉树的遍历从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。抽象操作,可以是对结点进行的各种处理,这里简化为输出结点的数据。访问是什么意思?2.二叉树的基本操作(1)二叉树的遍历先序遍历①若二叉树为空,则空操作返回。(否则)②访问根结点。③先序遍历根结点的左子树。④先序遍历根结点的右子树。先序遍历序列:ABDGCEFABCDEFG2.二叉树的基本操作(1)二叉树的遍历中序遍历①若二叉树为空,则空操作返回。(否则)②中序遍历根结点的左子树。③访问根结点。④中序遍历根结点的右子树。ABCDEFG中序遍历序列:DGBAECF2.二叉树的基本操作(1)二叉树的遍历后序遍历①若二叉树为空,则空操作返回。(否则)②后序遍历根结点的左子树。③后序遍历根结点的右子树。④访问根结点。ABCDEFG后序遍历序列:GDBEFCA练一练--/+*abcdef二叉树遍历操作练习先序遍历结果:中序遍历结果:后序遍历结果:-+a*b-cd/efa+b*c-d-e/fabcd-*+ef/-2.二叉树的基本操作(1)二叉树的遍历层次遍历从二叉树的第一层(即根结点)开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问。ABCDEFG层次遍历序列:ABCDEFG2.二叉树的基本操作(2)二叉树的建立能不能根据输入的线性序列唯一确定一棵二叉树?例如,输入先序序列abc解决?在输出遍历序列时,忽略了空结点,从而导致无法确定在遍历序列中的后继结点是左孩子还是右孩子。如果将“若二叉树为空,则遍历结束”改为“若二叉树为空,则输出字符#”2.二叉树的基本操作(2)二叉树的建立扩展二叉树的先序遍历序列:AB#D##C##DBAC#DBAC####2.二叉树的基本操作(2)二叉树的建立先序遍历①若二叉树为空,则空操作返回;(否则)②访问根结点;③先序遍历根结点的左子树;④先序遍历根结点的右子树。先序创建①若输入为#(空),则root=NULL(否则)②创建根结点;③先序创建根结点的左子树;④先序创建根结点的右子树。由带空指针标记的先序序列构造二叉树的算法
DBAC#DBAC####2.二叉树的基本操作(3)二叉树的销毁什么是二叉树的销毁?为什么要专门进行销毁?二叉树的销毁即释放二叉链表中的所有结点。二叉链表对象的建立是一个动态申请空间的过程,因此,当程序结束时需要释放二叉链表中的所有结点。每个结点必须被释放,且只能被释
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 监理师考试学习成果展示试题及答案
- 商场库房收费管理制度
- 工地特种设备管理制度
- 办公场所安全管理制度
- 公司公文处理管理制度
- 学校学生疫情管理制度
- 智能照明系统中的嵌入式应用试题及答案
- 家电仓库安全管理制度
- 公司抖音员工管理制度
- 员工培训财务管理制度
- 2023年高考物理试卷(广东)含答案解析
- 部编版小学道德与法治三年级下册期末质量检测试卷【含答案】5套
- 断亲协议书范本
- 信息系统项目管理师论文8篇
- (完整版)重大危险源清单及辨识表
- 试验室仪器设备检定校准证书和测试报告确认表(公司范本)
- 《传媒翻译》教学大纲
- 新工科的建设和发展思考ppt培训课件
- [北京]大型房地产开发项目成本测算实例及表格(全套)
- 电荷耦合器件(CCD)介绍和工作原理
- JJF(闽) 1101-2020 在线式CCD图像尺寸测量系统校准规范
评论
0/150
提交评论