数据结构第6章B-chapterb
数据库6版第二、六章习题解答 (1)

数据库5版第二章习题解答表结构employee(person-name,street, city)worker (person-name, company-name, salary)company (company-name, city )manages (person-name, manager-name)2.1 主码employee(person-name,street, city)worker (person-name, company-name, salary)company (company-name, city )manages (person-name, manager-name)2.7a)Πperson-name(σcity=”Miami”(employee))b) Πperson-name(σsalary >100000 (works))c) Πperson-name(σcity=”Miami”∧salary >100000(employee∞works))2.12a)Πperson-name(σcompany-name=”first…”(works) )b) Πperson-name, city(σcompany-name=”first…”(employee∞works) )c) Πperson-name, street,city(σcompany-name=”first…”∧salary >100000 (employee∞works))6.2a) 找出与其经理居住在同一城市同一街道的所有员工的姓名。
分析:用e1扩充manages中员工的属性,用e2扩充manages中经理的属性Πe1.person-name(σe1.person-name=manages.person-name∧manages.manager-name=e2.person-name∧e1.street=e2.street∧e1.city=e2.city( (ρe1(employee)×manages×ρe2(employee)))b) 找出此数据库中不在First Bank Corporation 公司工作的所有员工姓名。
第6章 常用的工具类

第6章常用工具类和Applet小程序Java的API中包含了大量的预定义类,我们将主要介绍Java的实用工具包java.util中的常用的一些数据结构类和工具类。
另外,我们还将在本章中给大家介绍关于Applet小程序的基本知识。
Java中引入了可以集中有效地组织和处理数据的接口和类,这些接口和类组成了Java的集合(Collection)框架。
Java的集合框架支持三种类型的集合:线性表List、规则集Set和映射Map。
Set的实例存储一组互不相同的元素,List的实例存储一组顺序排列的元素,Map 的实例存储一组对象,该实例中的每个元素都有一个关联的关键字。
Collection接口是构造集合框架的基础,它是处理对象集合的根接口,声明了所有Collection类都将拥有的核心方法,具体见表6-1。
表6-1 Collection接口声明的方法6.1 List和ArrayList类6.1.1 ListList接口扩展了Collection接口,定义了一个可以存储重复元素的有序集合。
用户可以通过指定下标访问元素,并可以指定元素在集合中的存储位置。
在List类集中,下标从0开始。
List接口除继承了Collection接口声明的方法外,还定义了它自己的一些方法,具体见表6-2。
表6-2 List接口声明的方法在Java中的数组是定长的,一旦数组被创建后就无法改变其大小。
若在定义数组时还无法确定其存储空间,只有在程序运行时才能知道实际需要的数组空间时,可以选择通过ArrayList类声明可变长度的数组。
ArrayList类实现了List接口,它将元素存储在一个动态数组中,存储空间大小可随存储元素的多少进行动态变化。
ArrayList提供了三个构造函数:①ArrayList()②ArrayList(Collection c)③ArrayList(int initialCapacity)其中构造函数①用于创建一个空数组列表,构造函数②用于建立一个包含集合c中所有元素的数组列表,构造函数③用于建立一个指定初始大小为initialCapacity的数组列表。
软件工程导论(第五版) 第六章

•经典的结构程序设计:只允许使用顺序、
IF_THEN_ELSE选择和DO_WHILE循环;
扩展的结构程序设计:除了三种基本控制结构, 还使用DO_CASE和DO_UNTIL循环;
修正的结构程序设计:除了三种基本控制结构 和两种扩充结构,还使用BREAK等结构。
6.1.1 结构化程序
6.1.1.1 控制结构 • 流程图通常由三种结点组成: •1)函数结点 • 如果一个结点有一个入口线和
行李重量w30行李重量w30国内乘客外国乘客头等舱其他舱头等舱其他舱残疾乘客正常乘客残疾乘客正常乘客残疾乘客正常乘客残疾乘客正常乘客w302w304w303w306w304w308w306w3012免费图67用判定树表示计算行李费的算法636pdl2可以使用普通的正文编辑程序或文字处理系统来完成pdl的书写和编辑工作
•定义7:由基本程序的一个固定的基集合构造出的复合
程序,称为结构化程序。
6.1.2 结构化定理 •结构化定理:任一正规程序都可以函数等价于
一 个 由基 集 合 {顺 序 , If-else-then,While-do} 产生的结构化程序。
• 实际上,只要能证明可以将任一正规程序转
换成等价的结构化程序就可以证明这个结构化 定理。
123456789 TTTTFFFF TFTFTFTF FFTTFFTT
TFFFFFFFF
×
×
×
×
×
×
×
×
×
•6.3.5 判定树
• 判定树是判定表的变种。
行李重量
国内乘客
头等舱 其他舱
残疾乘客
正常乘客 残疾乘客 正常乘客
(W-30)×2 (W-30)×4 (W-30)×3 (W-30)×6
第6章数据库知识-ACCESS知识点总结1

第6章数据库知识-ACCESS1、数据管理技术经历了人工管理、文件系统、数据库系统三个阶段。
2、人工管理数据具有如下特点:(1)数据不保存。
(2)数据没有相应的软件系统管理。
(3)数据不共享。
(4)数据不独立。
3、文件系统存在的缺点:(1)变成不方便。
(2)数据冗余量大。
(3)数据独立性不好。
(4)不支持并发访问。
(5)数据缺少统一管理。
4、数据库系统的优点:(1)数据结构化。
(2)数据的共享性高,冗余度低,以扩充。
(3)数据独立性高。
(4)数据由数据库管理系统统一管理和控制。
5、数据仓库:长期数据存储,这些数据来自于多个异种数据源。
主要特点:面向主题的、集成的、时变的、非易失的。
6、数据库的基本概念:(1)数据、数据库、数据库管理系统、数据库系统。
数据(Data):描述事物的符号记录,是数据库中存储的基本对象。
数据有多种表现形式,它们都可以经过数字化后存入计算机。
数据库(DataBase):长期存储在计算机内的、有组织的、可共享的数据集合。
数据库管理系统(DBMS):完成科学的组织数据和存储数据,并高效地获取和维护数据任务的一个系统软件,是位于用户和操作系统之间的一个数据管理软件。
功能:数据定义、数据操纵、数据库的运行管理、数据库的建立和维护。
户构成。
(2)数据模型:是数据库系统的核心和基础。
(3①关系模型:把世界看作是由实体和联系构成的。
实体:指现实世界中具有区别于其他事物的特征或属性并与其他实体有联系的对象。
在关系模型中,实体通常是以表的形式来表现。
行描述实体的一个实例(数据的记录),列描述实体的一个特征或属性(记录中的域)。
联系:一对一、一对多、多对多。
关系:一个关系就是一张二维表,每个关系有一个关系名。
Access中,一个关系就是一个表对象。
属性:二维表中垂直方向的列被称为属性,每个属性都有一个唯一的属性名。
在Access中,属性被称为字段,属性名叫做字段名。
域:一个属性的取值范围。
元组:行,即记录。
第6章 符号表管理和错误处理

4
6.1.1 符号表的作用和内容
作用: (1)收集符号的各种信息 (2)语义检查的依据 (3)目标代码生成阶段地址分配的依据
内容:名字栏+信息栏
编译原理
2019年10月29日
5
6.1.2 符号表的组织
操作: (1)向表中填入一个新标识符。 (2)对于给定一个标识符:
① 查找是否在表中; ② 访问它在表中的相关信息; ③ 在表中填写或更新它的某些信息。 (3)更新或删除一个或一组无用的项。
编译原理
2019年10月29日
12
语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制
语义规则
1. 标识符先说明后引用 2. 标识符引用要符合作用域规定 3. 过程调用时实参与形参类型一致 4. 参与运算的操作数类型一致 5. 下标变量的下标不能越界
超越系统限制:(计算机系统和编译系统) 1. 数据溢出错误,常数太大,计算结果溢出。
教学内容
• 6.1 符号表管理 • 6.2 错误处理 • 6.3 PL/0编译程序的错误处理
编译原理
2019年10月29日
3
6.1 符号表管理
编译程序中使用最多的数据结构是表 源程序中的各种信息,以便查询或修改 在这些表中,尤以符号表最为重要
生存期最长 使用最为频繁
编译原理
2019年10月29日
编译原理
2019年10月29日
18
6.3 PL/0编译程序的错误处理
错误局部化处理遵循以下两条原则。 (1)镇定原则 (2)关键字原则
•在进入某个语法单位时,调用test检查当前符号是否属 于该语法单位的首符号集。若不属于,则滤去首符号和 后继符号集合外的所有符号。 •在语法单位分析结束时,调用test,检查当前符号是否 属于调用该语法单位时应有的后继符号集合。若不属于, 则滤去后继符号和首符号集合外的所有符号。
数据库原理与应用:基于SQL+Server+2005课后答案

CHAPTER 01第1章数据库系统概述练习题1参考答案1.文件系统中的文件与数据库系统中的文件有何本质上的不同?答文件系统中的文件是面向应用的,一个文件基本上对应于一个应用程序,文件之间不存在联系,数据冗余大,数据共享性差,数据独立性差;数据库系统中的文件不再面向特定的某个或多个应用,而是面向整个应用系统,文件之间是相互联系着的,减少了数据冗余,实现了数据共享,数据独立性高。
2.对数据库的3种不同数据观是如何划分的?答概念模式体现了数据库的总体观,称为DBA视图;内模式体现了数据库的存储观,称为系统程序员视图;外模式体现了数据库的用户观,称为用户视图。
用户视图有多个,而其他视图只有一个。
3.什么是数据独立性?数据库系统是如何实现数据独立性的?答数据独立性是指应用程序和数据之间相互独立、不受影响,即数据结构的修改不引起应用程序修改的特性。
数据独立性包括物理数据独立性和逻辑数据独立性。
物理数据独立性是指数据库物理结构改变时不必修改现有的应用程序。
逻辑数据独立性是指数据库逻辑结构改变时应用程序不用改变。
数据独立性是由DBMS的二级映象功能来保证的。
数据库系统通常采用外模式、模式和内模式三级结构,数据库管理系统在这三级模式之间提供了外模式/概念模式和概念模式/内模式两层映象,当整个系统要求改变模式时(增加记录类型,增加数据项)时,由DBMS 对各个外模式/概念模式的映象作相应改变,可以使外模式保持不变,由于应用程序是依据数据的外模式编写的,因而应用程序不必修改,保证了数据的逻辑独立性。
当数据的存储结构改变时,由DBMS对概念模式/内模式映象作相应改变,可以使模式不变,从而应用程序也不必改变,保证了数据的物理独立性。
第2章数据模型CHAPTER 02练习题2参考答案1.什么是关系?什么是关系框架?关系之间实现联系的手段是什么?什么是关系数据库?答关系是一张二维表,即元组的集合。
关系框架是一个关系的属性名表。
6章符号表组织
临时变量值区
v5
b值
v4 数组a值区 链接表
v3
y值
v2 v1
x值 exp值
管理区
【例6.2】有类型说明:
TYPE arr = ARRAY [1..10] OF ARRAY [1..5] OF INTEGER;
试填写符号表。
SYNBL
TYPEL
arr
t
i
r
LENL
c
200
b
AINFL
a
1
10
20
a
6.2 符号表的组织与管理
6.2.1 符号表的工作原理
⑴ 遇 定义性标识符(在说明中)--- 把语义信 息填入表中,并修改其TOKEN的指针,使其指向相 应的表项:(i , ) 该标识符符号表项
⑵ 遇 应用性标识符(在语句中)--- 查符号表 的相应项,查到后修改其TOKEN的指针,使其指向 相应的表项:(i , ) 该标识符符号表项
活动记录:一个有结构的连续存储块。用来存储过 函一次执行中所需要的信息。
活动记录仅是一种存储映像,编译程序所进行 的运行时刻存储分配是在符号表中进行的。
如果不支持可变数据结构,活动记录的体积是 可以在编译时确定的。
局部数据 连接数据
6.5.2 活动记录(续)
2.活动记录的结构
(1)连接数据区
TOP
1
5
itp 4
设:实型占8个存储单元,整型占4个单元,布尔型和字符型占1个单元。
【例6.3】有类型说明: TYPE rec = RECORD
u: INTEGER;
试填写符号表。 SYNBL
v: ARRAY [1..10] OF BOOLEAN; r: RECORD x, y : REAL END END;
第6章(5课时)
概要设计主要方法是面向数据,详细设计和程序设计主要方 法是面向对象。 所有的设计都面向模块(部件/构件) 。
*6.2
软件设计原理
“设计”在IEEE中的定义是:“定义一个系统或部
件的架构、组成、接口或其它特征的过程”。
架构设计有时也称为概要设计,用于描述系统最顶
的结构和组织形式,标识出软件的各个组成部分。
B1
计算平均分
B2
计算最高分
(3)共用耦合(高级别耦合)
如果两个模块都和同一个公共数据域有关,则称 Nhomakorabea公用耦合。
公用联结是一种不良的联结关系,在模块设计
时,一般不允许有公共联结关系的模块存在。
A 公用 数据
B
C
例:
Global : V1 V2 Global : V1 V2
A: ………… ………… A1=V1+V2 ………… …………
(2) 过程抽象
将数据处理抽象成函数或方法,获得最终的执行结果, 而不必去关心它们的内部实现细节。
(3) 数据抽象
在数据库建模和面向对象建模时,使用数据抽象,设 计出数据库的表及字段,或设计出类及类的属性。
原理2:分解
将一个软件分解成许多小模块(代码行在200~400之间),不
同模块负责不同的功能。
详细设计
覆盖《概要设计说明书》的全部内容 作为指导程序设计的依据
注重于微观上和框架内的设计,它是各子系统的公用部件实现
设计、专用模块实现设计、存储过程实现设计、触发器实现设
模块实现设计包括:登录注册模块设计、信息发布模块设计、 菜单模块设计、录入修改模块设计、查询统计模块设计、业务 逻辑处理模块设计、报表输出模块设计、前台网站模块设计、 后台数据处理模块设计、数据传输与接收模块设计等等。
电大数据结构(本)期末复习指导
中央广播电视大学数据结构(本)期末复习指导第一部分课程考核说明一、考核说明数据结构(本)是中央广播电视大学计算机科学与技术(本科)专业的一门统设必修、学位课程。
4学分,72学时,其中实验24学时,开设一学期。
课程主要内容包括:数据结构和算法的基本概念、线性表、栈和队列、串、数组和广义表、树和图、查找和排序等。
目的是使学生通过该课程的学习,深入地理解数据的逻辑结构和物理结构以及有关算法,掌握基本的程序设计技能,学会编制高效可靠的程序,为学习后续课程奠定基础。
现将有关考核的几个问题说明如下:1.考核对象2007年秋季起入学的计算机科学与技术专业(本科)学生。
2.考核依据以数据结构(本)课程教学大纲为依据编制,考核说明是本课程形成性考核和终结性考试命题的基本依据。
3.考核方式采用形成性考核和终结性考试相结合的方式。
4.课程总成绩的记分方法课程总成绩按百分制记分,其中形成性考核所占的比例为30%,终结性考试占70%。
60分为合格,可以获得课程学分。
本课程的学位课程学分为70分,即课程总成绩达到70分及以上者有资格申请专业学位。
5.形成性考核的要求、形式及手段形成性考核主要考核学生形成性作业和实验的完成情况,占课程总成绩的30%。
形成性考核以作业册的形式下发,由各地电大根据学生作业和实验的完成情况进行考核。
中央电大将不定期随机抽检各地电大学生的形成性作业及课程实验报告。
6.终结性考试的要求及方式(1)考试要求考核要求分为了解、理解和掌握三个层次:了解:是指(1)学习本课程主干知识点所需要的概念、方法、预备知识和相关内容。
(2)就大部分学生目前的知识结构和基础理解和掌握有一定困难,有待今后进一步学习的内容。
(3)在主干知识点基础上拓展的内容。
这部分不属考核的主要内容。
理解:是指要求学生准确全面领会的概念、方法和思路等。
相关内容是本课程的主干知识点,要求学生能融汇贯通,并能利用所学知识分析解决相关问题。
这部分是考核的主要范围。
数据结构复习题目及答案
《数据结构-C语言版》第一章绪论单项选择题1.在数据结构中,数据的基本单位是_____ ____。
A. 数据项B. 数据类型C. 数据元素D. 数据变量2.数据结构中数据元素之间的逻辑关系被称为__ ____。
A. 数据的存储结构B. 数据的基本操作C. 程序的算法D. 数据的逻辑结构3.在数据结构中,与所使用计算机无关的是数据的____ ___。
A. 存储结构B. 逻辑和物理结构C. 逻辑结构D. 物理结构4.在链式存储结构中,数据之间的关系是通过____ ____体现的。
A. 数据在存的相对位置B. 指示数据元素的指针C. 数据的存储地址D. 指针5.计算算法的时间复杂度是属于一种____ ___。
A. 事前统计的方法B. 事前分析估算的方法C. 事后统计的方法D. 事后分析估算的方法6.在对算法的时间复杂度进行估计的时候,下列最佳的时间复杂度是____ __。
A. n2B. nlognC. nD. logn7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为____ ___。
A. O(1)B. O(n)C. O(200n)D. O(nlog2n)CDCBBDD第二章线性表单项选择题1.链表不具有的特点是____ ____。
A. 可随机访问任一元素B. 插入和删除时不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表的长度正比2.设顺序表的每个元素占8个存储单元。
第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为。
A. B. 140 C. 147 D. 1483.在线性链表存储结构下,插入操作算法。
A. 需要判断是否表满B. 需要判断是否表空C. 不需要判断表满D. 需要判断是否表空和表满4.在一个单链表中,若删除p所指结点的后继结点,则执行。
A. p->next = p->next->next;B. p->next = p->next;C. p = p->next->next;D. p = p->next; p->next = p->next->next;5.将长度为n的单链表接在长度为m的单链表之后的算法时间复杂度为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23/24
附:层序遍历算法(利用队列)
void level_order(tree_pointer ptr) /* level order tree traversal */ +*E*D /CAB { int front = rear = 0; tree_pointer queue[MAX_QUEUE_SIZE]; if (!ptr) return; /* empty queue */ addq(front, &rear, ptr); for (;;) { ptr = deleteq(&front, rear);
第6章 树和二叉树 ( Tree & Binary Tree ) 6.1 6.2 6.3 6.4 6.5 树的基本概念 二叉树 遍历二叉树和线索二叉树 树和森林 赫夫曼树及其应用
1/24
6.3
遍历二叉树和线索二叉树
一、遍历二叉树(Traversing Binary Tree)
遍历定义——指按某条搜索路线遍访每个结点且 不重复(又称周游)。
8/24
D
E
F
G
例:【严题集6.42③】编写递归算法,计算二叉树 中叶子结点的数目。
思路:输出叶子结点比较简单,用任何一种遍历算法,凡 是左右指针均空者,则为叶子,将其统计并打印出来。 DLR(leizi *root) //采用中序遍历的递归算法
{ if ( root!=NULL ) //非空二叉树条件,还可写成if(root)
注:“先、中、后”的意思是指访问的结点D是先于子树 出现还是后于子树出现。
3/24
例1:
A B D E C 先序遍历的结果是: 中序遍历的结果是: 后序遍历的结果是:
ABDEC
D BEAC DEBCA
口诀: DLR—先序遍历,即先根再左再右 LDR—中序遍历,即先左再根再右 LRD—后序遍历,即先左再右再根
13/24
B 中序遍历:B D C E A F H G
后序遍历:D E C B H G F A
A B C D E H
( F H G) ( H G)
(B D C E) C E) (D
F G
14/24
问:用二叉链表法(l_child, r_child)存储包含n个结点的
二叉树,结点的指针区域中会有多少个空指针? n+1
12/24
特别讨论:若已知先序/后序遍历结果和中序遍历 结果,能否“恢复”出二叉树?
【严题集6.31④】 证明:由一棵二叉树的先序序列和中序 序列可唯一确定这棵二叉树。 例:已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: ①由后序遍历特征,根结点必在后序序列尾部(即A); ②由中序遍历特征,根结点必在其中间,而且其左部必全部是 左子树子孙(即BDCE),其右部必全部是右子树子孙(即FHG); ③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF 子串可确定F为A的右孩子;以此类推。
分析:用二叉链表存储包含n个结点的二叉树,结点必有2n
个链域(见二叉链表数据类型说明)。 除根结点外,二叉树中每一个结点有且仅有一个双亲 (直接前驱),所以只会有n-1个结点的链域存放指针,指 向非空子女结点(即直接后继)。
所以, 空指针数目=2n-(n-1)=n+1个。 思考:二叉链表空间效率这么低,能否利用这些空闲区存放 有用的信息或线索? ——我们可以用它来存放当前结点的直接前驱和后继等线索, 以加快查找速度。
18/24
例1:带了两个标志的某先序遍历结果如表所示,请画
出对应二叉树。
ltag 0 0 data A G rtag 0 0
1 E 0
1 I 1
1 D 0
1 J 1
0 H 0
1 C 1
0 F 1
1 B 1
A
G E D C H F
I
J
B
19/24
例2:画出以下二叉树对应的中序线索二叉树。
解:该二叉树中序遍历结果为: H, D, I, B, E, A, F, C, G 所以添加线索应当按如下路径进行: root
6/24
则三种遍历算法可写出:
结点数据类型自定义 typedef struct leizi { int data; struct leizi *lchild,*rchild; } leizi; leizi *root; 中序遍历算法 LDR(leizi *root) {if(root !=NULL) {LDR(root->lchild); printf(“%d”,root->data); LDR(root->rchild); } return(0);}
17/24
data
RTag rchild
注:在线索化二叉树中,并不是每个结点都能直 接找到其后继的,当标志为0时,则需要通过一 定运算才能找到它的后继。
有关线索二叉树的几个术语:
线索链表:用前页结点结构所构成的二叉链表
线 索:指向结点前驱和后继的指针
线索二叉树:加上线索的二叉树(图形式样) 线 索 化:对二叉树以某种次序遍历使其变为线 索二叉树的过程
B
C
D
E
11/24
3 中序遍历的非递归(迭代)算法 算法思路:若不用递归,则要实现二叉树遍历的“嵌套”规 则,必用堆栈。可直接用while语句和push/pop操作。参见 教材P130-131程序。 4.判别给定二叉树是否为完全二叉树(即顺序二叉树)。 算法思路:完全二叉树的特点是:没有左子树空而右子树单 独存在的情况(前k-1层都是满的,且第k层左边也满)。 技巧:按层序遍历方式,先把所有结点(不管当前结点是否有 左右孩子)都入队列.若为完全二叉树,则层序遍历时得到的 肯定是一个连续的不包含空指针的序列.如果序列中出现了空 指针,则说明不是完全二叉树。
先序遍历算法 DLR( leizi *root ) {if (root !=NULL) //非空二叉树 {printf(“%d”,root->data); //访问D DLR(root->lchild); //递归遍历左子树 DLR(root->rchild); //递归遍历右子树 } return(0); } 后序遍历算法 LRD (leizi *root) {if(root !=NULL) {LRD(root->lchild); LRD(root->rchild); printf(“%d”,root->data); } return(0);}
1
21/24
4. 给定如图所示二叉树T,请画出与其对应的中 序线索二叉树。
28
NIL
25
33
NIL
40
55
60 08
54
解:因为中序遍历序列是:55 40 25 60 28 08 33 54 对应线索树应当按此规律连线,即在原二叉树中添加虚线。
22/24
附:中序遍历迭代算法(利用堆栈)
void iter_inorder(tree_pointer node) { int top= -1; /* initialize stack */ tree_pointer stack[MAX_STACK_SIZE]; for (;;) { for (; node; node=node->left_child) add(&top, node);/* add to stack */ node= delete(&top); /* delete from stack */ if (!node) break; /* empty stack */ printf(“%D”, node->data); node = node->right_child; } } 时间复杂度O(n)
遍历用途——它是树结构插入、删除、修改、查 找和排序运算的前提,是二叉树一 切运算的基础和核心。 遍历方法——牢记一种约定,对每个结点的查看 都是“先左后右” 。
2/24
遍历规则———
二叉树由根、左子树、右子树构成,定义为D、 L、R D、 L、R的组合定义了六种可能的遍历方案: LDR, LRD, DLR, DRL, RDL, RLD 若限定先左后右,则有三种实现方案: DLR LDR LRD 先 (根)序遍历 中 (根)序遍历 后(根)序遍历
{if(!root->lchild&&!root->rchild) //是叶子结点则统计并打印
{sum++; printf("%d\n",root->data);} DLR(root->lchild); } return(0); }
9/24
//递归遍历左子树,直到叶子处;
DLR(root->rchild); } //递归遍历右子树,直到叶子处;
注:要实现遍历运算必须先把二叉树存入机内。
怎样建树?见教材P131程序。 思路:利用前序遍历来建树 (结点值陆续从键盘输入,用DLR为宜)
Bintree createBTpre( )
{ Bintree T; char ch; scanf(“%c”,&ch); if(ch==’’)T=NULL; else{T=( Bintree )malloc(sizeof(BinTNode)); T->data=ch; T->lchild=createBTpre(); T->rchild=createBTpre(); } return T;}
为避免悬空 态,应增设 一个头结点
A 悬空?
B
C
悬空?
D
E
F
G
H
I
20/24
对应的中序线索二叉树存储结构如图所示:
注:此图中序遍历结果为: root H, D, I, B, E, A, F, C, G 0 0 -0 0 0 E I 1 1 F 1 C 1 0 G 1