数据结构教案第六章.docx
- 文档编号:30304817
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:29
- 大小:54.51KB
数据结构教案第六章.docx
《数据结构教案第六章.docx》由会员分享,可在线阅读,更多相关《数据结构教案第六章.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构教案第六章
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务一、树的有关概念
前言:
树型结构是一类重要的非线性数据结构。
其中以树和二叉树最为常用;
树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象的表示出来等等。
一、树的概念
树形结构是一种重要的非线性结构,讨论的是层次和分支关系。
树是n个结点的有限集合,在任一棵非空树中:
(1)有且仅有一个称为根的结点。
(2)其余结点可分为个互不相交的集合,而且这些集合中的每一集合都本身又是一棵树,称为根的子树。
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
树是递归结构,在树的定义中又用到了树的概念
例:
上面的图是一棵树
T={A,B,C,D,E,F,G,H,I,J,K,L,M}
A是根,其余结点可以划分为3个互不相交的集合:
T1={B,E,F,K,L},T2={C,G},T3={D,H,I,J,M}
这些集合中的每一集合都本身又是一棵树,它们是A的子树。
例如对于T11,B是根,其余结点可以划分为2个互不相交的集合:
T11={E,K,L},T12={F},T11,T12是B的子树。
从逻辑结构看:
1)树中只有根结点没有前趋;
2)除根外,其余结点都有且仅一个前趋;
3)树的结点,可以有零个或多个后继;
4)除根外的其他结点,都存在唯一条从根到该结点的路径;
5)树是一种分枝结构(除了一个称为根的结点外)每个元素都有且仅有一个直接前趋,有且仅有零个或多个直接后继。
二、树的应用
1、树可表示具有分枝结构关系的对象
例1.家族族谱
例2.单位行政机构的组织关系
2、树是常用的数据组织形式
有些应用中数据元素之间并不存在间分支结构关系,但是为了便于管理和使用数据,将它们用树的形式来组织。
例3计算机的文件系统
不论是DOS文件系统还是window文件系统,所有的文件是用树的形式来组织的。
教
学
过
程
设
计
(续表)
三、树的表示
1)图示表示
2)二元组表示
3)嵌套集合表示
4)凹入表示法(类似书的目录)
四、树的基本术语
树的结点:
包含一个数据元素及若干指
向子树的分支;
孩子结点:
结点的子树的根称为该结点
的孩子;
双亲结点:
B结点是A结点的孩子,则A
结点是B结点的双亲;
兄弟结点:
同一双亲的孩子结点;
堂兄结点:
同一层上结点;
祖先结点:
从根到该结点的所经分支上的所有结点
子孙结点:
以某结点为根的子树中任一结点都称为该结点的子孙
结点层:
根结点的层定义为1;根的孩子为第二层结点,依此类推;
树的深度:
树中最大的结点层
结点的度:
结点子树的个数
树的度:
树中最大的结点度。
叶子结点:
也叫终端结点,是度为0的结点;
分枝结点:
度不为0的结点;
有序树:
子树有序的树,如:
家族树;
无序树:
不考虑子树的顺序;
森林;互不相交的树集合;森林和树之间的联系是:
一棵树去掉根,其子树构成一个森林;一个森林增加一个根结点成为树。
复习思考题
作业
上机任务
案例分析:
例1.家族族谱
例2.单位行政机构的组织关系
参考文献
课后记
(或归纳小结)
本章主要介绍树的定义,日常应用,树的概念;为以后的二叉树学习
带来好的理解
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务一、树的有关概念(续)
复习上一次的内容,然后提出问学生,接着从上一次内容进入今天新的课程,让课程内容的完整性
五、树的基本操作
树的应用很广,应用不同基本操作也不同。
下面列举了树的一些基本操作:
1)initiate(T);T树的初始化,包括建树。
2)root(T);求T树的根。
3)parent(T,x):
求T树中x结点的双亲结点。
4)Child(T,x,i):
求T树中x结点的第i个孩子结点。
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
5)right_sibling(T,x):
求T树中x结点的右兄弟
6)insert_Child(y,i,x):
将根为x的子树置为y结点的第i个孩子
7)del_child(x,i);删除x结点的第i个孩子
8)traverse(T);遍历T树。
按某个次序依次访问树中每一个结点,并使每个结点都被访问且只被访问一次。
9)clear(T);置空T树
任务二、二叉树
树是一种分枝结构的对象,在树的概念中,对每一个结点孩子的个数没有限制,因此树的形态多种多样,本章我们主要讨论一种最简单的树——二叉树
一、二叉树的概念
二叉树:
或为空树,或由根及两颗不相交的左子树、右子树构成,并且左、右子树本身也是二叉树。
说明
1)二叉树中每个结点最多有两颗子树;二叉树每个结点度小于等于2;
2)左、右子树不能颠倒——有序树;
3)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念;
二、二叉树的基本形态
(a)空树
(b)仅有根
(c)右子树空
(d)左、右子树均在
(e)左子树空
三、应用举例
教
学
过
程
设
计
(续表)
例1可以用二叉树表示表达式
a+b*(c-d)-e/f
例2双人比赛的所有可能的结局
开局连赢两局或五局三胜
四、二叉树性质
性质1在二叉树的第i层上最多有2i-1个结点
性质2深度为k的二叉树最多有2k-1个结点
性质3设二叉树叶子结点数为n0,度为2的结点n2,则n0=n2+1
此三个性质是对任何一棵二叉树都实用的
复习思考题
作业
上机任务
案例分析:
例1:
已知二叉树有50个叶子结点,则该二叉树的总结点数是多少(99)
例2:
已知完全二叉树的第七层有8个结点,则其叶子结点数是(36)
参考文献
课后记
(或归纳小结)
本章主要介绍二叉树的定义,二叉树的五种形态、还有它的性质,并举例说明这些性质
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务二、二叉树(续)
复习上一次的内容,然后提问学生,接着从上一次内容进入今天新的课程,让课程内容的完整性
满二叉树:
如果深度为k的二叉树,有2k-1个结点则称为满二叉树。
完全二叉树:
如果深度为k的二叉树,有2k-1个结点则称为满二叉树;对其中的结点的编号:
根的号为1,从上到下,从左到右每个结点依次加1为其编号且一一对应,称之为完全二叉树。
下面是两个关于完全二叉树的性质:
性质4:
具有n个结点的完全二叉树的深度为:
trunc(log2n)+1.trunc(x)为取整函数。
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
对完全二叉树的结点编号:
从上到下,每一层从左到右
性质5:
在完全二叉树中编号为i的结点
1)若有左孩子,则左孩编号为2i
2)若有右孩子,则右孩子结点编号为2i+1
3)若有双亲,则双亲结点编号为trunc(i/2)
三.二叉树存贮结构
1、二叉树的顺序结构
满二叉树或完全二叉树的顺序结构:
用一组连续的内存单元,按编号顺序依
次存储完全二叉树的元素.例如,用一维数组bt[]存放一棵完全二叉树,将标号为i的结点的数据元素存放在分量bt[i-1]中。
存储位置隐含了树中的关系,树中的关系是通过完全二叉树的性质实现的。
例如,bt[5](i=6)的双亲结点标号是k=trunc(i/2)=3,双亲结点所对应的数组分量bt[k-1]=bt[2]
非完全二叉树的顺序结构:
按完全二叉树的形式补齐二叉树所缺少的那些结点,对二叉树结点编号,将二叉树原有的结点按编号存储到内存单元“相应”的位置上。
但这种方式对于畸形二叉树,浪费较大空间。
2、二叉链表
二叉链表中每个结点包含三个域:
数据域、左指针域、右指针域;图见课件
Structnode
{intdata;
structnode*lch,*rch;
};
注:
在含有n个结点的二叉链表中有n+1个空链域,这在线索二叉树中将利用到这些空的链域
3、三叉链表
三叉链表中每个结点包含四个域:
数据域、双亲指针域、左指针域、右指针域
Structnode
{intdata;
structnode*lch,*rch,*parent;
};
见课件和笔记
复习思考题
作业
上机任务
案例分析:
例:
给一个二叉树画这棵树的顺序存储和二叉链表的存储形式,另给一个顺序的存储形式来画出这棵二叉树
参考文献
课后记
(或归纳小结)
本章主要介绍完全二叉树和满二叉树的定义,还有它的两个性质;然后介绍二叉树的存储形式:
顺序,二叉链表,三叉链表的形式
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务三、二叉树的遍历
复习上一次的内容,然后提问学生,接着从上一次内容进入今天新的课程,让课程内容的完整性
一、二叉树的遍历方法
遍历:
按某种搜索路径访问二叉树的每个结点,而且每个结点仅被访问一次。
访问:
含义很广,可以是对结点的各种处理,如修改结点数据、输出结点数据。
遍历是各种数据结构最基本的操作,许多其他的操作可以在遍历基础上实现。
二叉树由根、左子树、右子树三部分组成
二叉树的遍历可以分解为:
访问根,遍历左子树和遍历右子树
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
令:
L:
遍历左子树
T:
访问根结点
R:
遍历右子树
有六种遍历方法:
TLR,LTR,LRT,
TRL,RTL,RLT
先序遍历(TLR)
若二叉树非空
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树;
例:
先序遍历右图所示的二叉树
(1)访问根结点A
(2)先序遍历左子树:
即按TLR的顺序遍历左子树
(3)先序遍历右子树:
即按TLR的顺序遍历右子树
中序遍历(LTR)
若二叉树非空
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
例:
中序遍历右图所示的二叉树
(1)中序遍历左子树:
即按LTR的顺序遍历左子树
(2)访问根结点A
(3)中序遍历右子树:
即按LTR的顺序遍历右子树
后序遍历(LRT)
若二叉树非空
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
例:
后序遍历右图所示的二叉树
(1)后序遍历左子树:
即按LRT的顺序遍历左子树
(2)后序遍历右子树:
即按LRT的顺序遍历右子树
(3)访问根结点A
画一个二叉树然后写出它的先序遍历,中序遍历,后序遍历
复习思考题
作业
上机任务
案例分析:
例:
画一个二叉树然后写出它的先序遍历,中序遍历,后序遍历
参考文献
课后记
(或归纳小结)
本章主要介绍二叉树三种遍历方法,先序、中序、后序
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务三、二叉树的遍历
复习上一次的内容,然后提问学生,接着从上一次内容进入今天新的课程,让课程内容的完整性
一、遍历的递归算法
先序遍历(TLR)的定义:
若二叉树非空
(1)访问根结点;
(2)先序遍历左子树
(3)先序遍历右子树;
上面先序遍历的定义等价于:
若二叉树为空,结束——基本项(也叫终止项)
若二叉树非空——递归项
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
(1)访问根结点;
(2)先序遍历左子树
(3)先序遍历右子树;
1、先序遍历递归算法
voidprev(NODE*root)
{if(root!
=NULL)
{printf(“%d,”,root->data);
prev(root->lch);
prev(root->rch);
}
}
先序序列为
+*a–bc/de
称为前缀表达式
2、中序遍历递归算法
voidmid(NODE*root)
{if(root!
=NULL)
{prev(root->lch);
printf(“%d,”,root->data);
prev(root->rch);
}
}
中序序列为
a*b–c+d/e
称为中缀表达式
3、后序遍历递归算法
voidprev(NODE*root)
{if(root!
=NULL)
{prev(root->lch);
prev(root->rch);
printf(“%d,”,root->data);
}
}
后序序列为abc–*de/+
称为后缀表达式
教
学
过
程
设
计
(续表)
三、二叉树遍历的非递归算法
递归算法逻辑清晰、易懂,但在实现时,由于函数调用栈层层叠加,效率不高,故有时考虑非递归算法。
1、先序遍历(TLR)的非递归算法。
对每个结点,在访问完后,沿其左链一直访问下来,直到左链为空,这时,所有已被访问过的结点进栈。
然后结点出栈,对于每个出栈结点,即表示该结点和其左子树已被访问结束,应该访问该结点的右子树。
(1)当前指针指向根结点。
(2)打印当前结点,当前指针指向其左孩子并进栈,重复
(2),直到左孩子为NULL
(3)依次退栈,将当前指针指向右孩子
(4)若栈非空或当前指针非NULL,执行
(2);否则结束。
先序遍历的非递归算法
voidprev(NODE*root)
{NODE*p,*node[MAX];
inttop=0;p=root;
do
{while(p!
=NULL)
{printf(“%d,”,root->data);
node[top]=p;top++;
p=p->lch;
}
if(top>0)
{top--;p=node[top];p=p->rch;}
}while(top>0||p!
=NULL);
}
2、先序遍历(TLR)的非递归算法。
中序遍历的非递归算法
voidmin(NODE*root)
{NODE*p,*node[MAX];
inttop=0;p=root;
do
{while(p!
=NULL)
{node[top]=p;top++;p=p->lch;
}
if(top>0)
{top--;p=node[top];
printf(“%d,”,root->data);
p=p->rch;}
}while(top>0||p!
=NULL);
}
复习思考题
作业
上机任务
案例分析:
例:
画递归图,例见笔记
参考文献
课后记
(或归纳小结)
本章主要介绍二叉树三种遍历方法,先序、中序、后序的递归的算法和非递归的算法
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务四、树和森林(续)
4、孩子兄弟表示法
用二叉链表作为树的存贮结构。
链表的两个指针域分别指向该结点的第一个孩子结点和右边下一个兄弟结点。
structnode
{chardata;
structnode*son,*brother;
};
这种形式的存储和前面介绍的二叉链表存储二叉树的形式是一样,所以在这里就可以通过这种存储方法作为中间量,可以让我们树转换二叉树
二、树与二叉树的转换
二叉树与树都可用二叉链表存贮,以二叉链表作中介,可导出树与
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
二叉树之间的转换。
树与二叉树转换方法:
二叉树
根
结点X的左孩子
结点X的右孩子
树
根
结点X的第一个孩子
结点X紧邻的右兄弟
用例子说明:
如何把一棵树转换成二叉树
四、森林:
树的集合
将森林中树的根看成兄弟,可用树孩子兄弟表示法存储森林;用树与二叉树的转换方法,进行森林与二叉树转换;从树的二叉链表示的定义可知,任何一棵和树对应的二叉树,其右子树必为空。
所以只要将森林中所有树的根结点视为兄弟,即将各个树转换为二叉树;再按森林中树的次序,依次将后一个树作为前一棵树的右子树,并将第一棵树的根作为目标树的根,就可以将森林转换为二叉树。
转换规则:
若F={T1,T2,T3,…,Tn}是森林,则B(F)={root,LB,RB}
(1)若F为空,即n=0,则B(F)为空树。
(2)若F非空,则B(F)的根是T1的根,其左子树为LB,是从T1根结点的子树森林F1={T11,T12,…,T1m}转换而成的二叉树;其右子树为RB,是从除T1外的森林F’={T2,T3,…,Tn}转换而成的二叉树;
二叉树还原为森林
转换规则:
若B(F)={root,LB,RB}是一棵二叉树,则转换为森林F={T1,T2,Tn}的规则为
(1)若B为空,则F为空树。
(2)若B非空,则F第一棵树T1的根是二叉树的根,T1中根结点的子森林F1是由B的左子树LB转换而成的森林,F中除T1外其余树组成的森林F’={T2,T3,…,Tn}是由B(F)的右子树RB转换转换而成的;
用例子说明如何把一棵树转换成二叉树,再者如何把森林转换成二叉树,然后再来逆转
复习思考题
作业
上机任务
案例分析:
例:
用例子说明如何把一棵树转换成二叉树,再者如何把森林转换成二叉树,然后再来逆转
参考文献
课后记
(或归纳小结)
本章主要介绍树和二叉树的转换,森林和二叉树的转换等等
课程名称
数据结构
教学对象
新华软工
教材
数据结构(C语言)
授课内容
第六章树和二叉树
课时
2
教学目的
与要求
了解树、森林的定义;掌握二叉树的定义、性质、存储结构;掌握二叉树的遍历、树和森林的存储,哈夫曼树的应用
重点、难点
重点:
二叉树相关操作
难点:
二叉树的三种遍历
课型
电脑+理论
教学方法
投影、讨论、板书
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
任务四、树和森林(续)
4、孩子兄弟表示法
用二叉链表作为树的存贮结构。
链表的两个指针域分别指向该结点的第一个孩子结点和右边下一个兄弟结点。
structnode
{chardata;
structnode*son,*brother;
};
这种形式的存储和前面介绍的二叉链表存储二叉树的形式是一样,所以在这里就可以通过这种存储方法作为中间量,可以让我们树转换二叉树
二、树与二叉树的转换
二叉树与树都可用二叉链表存贮,以二叉链表作中介,可导出树与
安徽新华电脑专修学院课堂教学教案
(电脑应用课使用)
教
学
过
程
设
计
(续表)
二叉树之间的转换。
树与二叉树转换方法:
二叉树
根
结点X的左孩子
结点X的右孩子
树
根
结点X的第一个孩子
结点X紧邻的右兄弟
用例子说明:
如何把一棵树转换成二叉树
四、森林:
树的集合
将森林中树的根看成兄弟,可用树孩子兄弟表示法存储森林;用树与二叉树的转换方法,进行森林与二叉树转换;从树的二叉链表示的定义可知,任何一棵和树对应的二叉树,其右子树必为空。
所以只要将森
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教案 第六