第六章树和二叉树讲解
- 格式:doc
- 大小:108.00 KB
- 文档页数:11
第6章 树和二叉树内容概要:本章主要介绍树,二叉树,最优二叉树的相关概念和操作,存储结构和相应的操作,并在综合应用设计中,给出了对应算法的C 语言实现。
教学目标1.理解各种树和森林与二叉树的相应操作。
2.熟练掌握二叉树的各种遍历算法,并能灵活运用遍历算法实现二叉树的其他操作。
3.熟练掌握二叉树和树的各种存储结构及其建立的算法。
4.掌握哈夫曼编码的方法。
5.通过综合应用设计,掌握各种算法的C 语言实现过程。
基本知识点:树和二叉树的定义、二叉树的存储表示、二叉树的遍历以及其它操作的实现、树和森林的存储表示、树和森林的遍历以及其它操作的实现、最优树和赫夫曼编码重点:二叉树的性质、二叉树的遍历及其应用,构造哈夫曼树。
难点:编写实现二叉树和树的各种操作的递归算法。
本章知识体系结构:课时安排:6个课时树的定义 树树的性质 树的逻辑表示法 树形表示法 树的存储结构 双亲存储结构 文氏表示法凹入表示法 括号表示法 孩子存储结构 孩子双亲存储结构二叉树二叉树的定义 二叉树的性质二叉树的逻辑表示法(采用树的逻辑表示法)二叉树的存储结构二叉树的顺序存储结构先序遍历 中序遍历 后序遍历二叉树的遍历 二叉树的链式存储结构(二叉链) 由先序序列和中序序列构造二叉树 由中序序列和后序序列构造二叉树二叉树的构造 二叉树的线索化 哈夫曼树二叉树和树之间的差别 二叉树与树、森林之间的转换二叉树和树课程数据结构教学教具多媒体课件学时2班级06网络教学日期/课时 /2课时教学单元第6章树和二叉树教学方法讲授(PPT)教学目标掌握树、二叉树的基本概念和术语,二叉树的性质教学重点二叉树的定义、二叉树的性质、链式存储结构教学难点二叉树的性质、链式存储二叉树的基本操作组织教学一、树的定义二、树的基本概念三、二叉树的定义、性质四、二叉树的顺序存储结构和链式存储结构五、小结作业复习本讲内容并预习下一讲内容课堂情况及课后分析课程数据结构教学教具多媒体课件学时2班级06网络教学日期/课时 /2课时教学单元第6章树和二叉树教学方法讲授(PPT)教学目标掌握二叉树遍历的三种方法及二叉树的基本操作教学重点二叉树的遍历算法教学难点中序与后序遍历的非递归算法组织教学一、复习二叉树的定义二、遍历二叉树的三种方法三、递归法遍历二叉树四、二叉树的基本操作五、总结作业复习本讲内容并预习下一讲内容课堂情况及课后分析课程数据结构教学教具多媒体课件学时2班级06网络教学日期/课时 /2课时教学单元第6章树和二叉树教学方法讲授(PPT)教学目标理解树与森林的转换,掌握哈夫曼树教学重点哈夫曼树教学难点树与森林的转换组织教学一、导入二、树与森林三、哈夫曼树四、小结作业习题6课堂情况及课后分析前面几章讨论的数据结构都属于线性结构,线性结构的特点是逻辑结构简单,易于进行查找、插入和删除等操作,可用于描述客观世界中具有单一前驱和后继的数据关系。
第六章树和二叉树 6.1树(tree)的概念在日常生活中,可以见到很多情形可以归结为树结构。
如:家族谱系、行政管理机构、DOS和Windows 磁盘文件管理系统等。
我们讨论的树和自然界的树在生长方向上正好相反,它是倒长的树,即根朝上,枝干和叶子朝下。
例1:某家族谱系的一部分例2:国家行政管理机构的一部分例3:DOS和Windows磁盘文件的一部分C:\TC20VC6.0数据结构课件数据结构讲稿第一章第二章……MyTc程序Tc1Tc2……MyVc程序Vc1Vc2……树是一种层次结构,属于非线性结构。
我们学过的线性表可以灵活组织数据,但它受到线性结构的限制,表达层次结构不太方便。
6.1.1树的定义·树T是n(n≥0)个结点的有限集合。
它满足:(1)仅有一个特定的结点,称为根(root)结点;(2)其余结点分为m(m≥0)个互不相交的非空有限集合T,1,T2,……,T m,其中每个集合自身又是一棵树,称为根的子树(subtree)。
·为了表述方便,把没有结点的树称为空树。
·树的定义具有递归性:即一棵树是由根及若干棵子树构成的,而子树又是由根及若干棵子树构成的,……。
表达树的方法通常有4种:树形、凹入、集合和广义表(1) 树形表示法AB C DE F G H(2)凹入表示法ABCEFDGH(3)集合嵌套表示法A○E C○F○G D○H B(4)广义表表示法T(A(B,C(E,F),D(G,H)))6.1.3 树的基本术语为了对树的形态表述清楚和形象,通常引用树和人的特征及术语来描述。
(1)结点和树的度(degree)结点所拥有的子树的个数称为该结点的度,而树中各结点的度的最大值称为该树的度。
AB C DE F G H如:·结点B、E、F、G和H的度数是0·结点C和D的度数都是2·结点A的度数是3;显然3也是树的度数(2)叶子(leaf)结点和分支结点度为0的结点称为叶子结点(终端结点);度不为0的结点称为分支结点(非终端结点)。
第6章树和二叉树第 6 章树和二叉树6.1 已知一棵树如图所示,回答下列问题:(1) 哪个是根结点?(2) 哪些是叶子结点?(3) 哪个是结点 G 的双亲?(4) 哪些是结点 G 的祖先?(5) 哪些是结点 B 的孩子?(6) 哪些是结点B的子孙?(7) 哪些是结点 E 的兄弟?(8) 结点 B 和 H 的层次号分别是什么 ?(9) 树的深度是多少?(10) 以结点 C 为根的子树的深度是多少? 【6.1 解】:(1) A(2) K, F,G,H,I,J(3) B(4) B,A(5) E,F,G(6) E,F,G,K(7) F,G(8) 2, 3(9) 4(10) 26.2 在结点个数为n(n>1)的各棵树中,最小的高度是多少?它有多少个叶结点?多少个分支结点?最大的高度树是多少?它有多少个叶结点?多少个分去结点?【6.2解】结点个数为n时,高度最小的树高度为1,有2层;它有n-1个叶结点,1个分支结点;高度最大的树的高度为n-1,有n层;它有1个叶结点,n-1个分支结点。
6.3简述树与二叉树的区别?【6.3解】二叉树的度最大为2,而树的度可以大于2;二叉树的每个结点的孩子有左、右之分,而树中结点的孩子无左右之分。
6.4 n(n>1)个结点的各棵二叉树中,最小的高度(h≥1)多少?最大的高度是多少?【6.4解】最小高度为:⎣⎦n2log+1,此时树为完全二叉树;最大高度为n,比如一棵斜二叉树。
6.5如果一棵树有n1个度为1的结点,有n2个度为2的结点,…,n m个度为m的结点,试问有多少个度为0的结点?试推导之。
【6.5解】设叶子结点数为n0,则树中结点数和总度数分别为: 结点数=n0+n1+n2+...+n m总度数=n1+2n2+...+m×n m结点数等于总度数加1,所以得到:n0=∑=+-miini21))1((6.6如果已知一棵二叉树有20个叶子结点,有10个结点仅有左孩子,15个结点仅有右孩子,求出该二叉树的结点数目。
第6章树和二叉树(2)第六章树和二叉树一、选择题1.算术表达式a+b*(c+d/e)转为后缀表达式后为()A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++2. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是()A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定3.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为()。
A.n-1 B.⎣n/m⎦-1 C.⎡(n-1)/(m-1)⎤ D.⎡n/(m-1)⎤-1E.⎡(n+1)/(m+1)⎤-14.深度为h的满m叉树的第k层有()个结点。
(1=<k=<h)A.m k-1 B.m k-1 C.m h-1 D.m h-15. 若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( )A.X的双亲B.X的右子树中最左的结点C.X的左子树中最右结点D.X的左子树中最右叶结点6. 引入二叉线索树的目的是()A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一7.由3 个结点可以构造出多少种不同的二叉树?()A.2 B.3 C.4 D.58.下述编码中哪一个不是前缀码()。
A.(00,01,10,11) B.(0,1,00,11) C.(0,10,110,111)D.(1,01,000,001)二、判断题1. 给定一棵树,可以找到唯一的一棵二叉树与之对应。
2.将一棵树转成二叉树,根结点没有左子树;3. 在中序线索二叉树中,每一非空的线索均指向其祖先结点。
4. 一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和。
5.当一棵具有n个叶子结点的二叉树的WPL值为最小时,称其树为Huffman树,且其二叉树的形状必是唯一的。
三、填空题1.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为___ ___。
数据结构教案第六章树与二叉树目录6.1树的定义和基本术语 (1)6.2二叉树 (2)6.2.1 二叉树的定义 (2)6.2.2 二叉树的性质 (4)6.2.3 二叉树的存储结构 (5)6.3树和森林 (6)6.4二叉树的先|中|后序遍历算法 (7)6.5先|后|中序遍历的应用扩展 (9)6.5.1 基于先序遍历的二叉树(二叉链)的创建 (9)6.5.2 统计二叉树中叶子结点的数目 (9)6.5.3 求二叉树的高度 (10)6.5.4 释放二叉树的所有结点空间 (11)6.5.5 删除并释放二叉树中以元素值为x的结点作为根的各子树 (12)6.5.6 求位于二叉树先序序列中第k个位置的结点的值 (12)6.5.7 线索二叉树 (13)6.5.8 树和森林的遍历 (14)6.6二叉树的层次遍历 (16)6.7判断一棵二叉树是否为完全二叉树 (16)6.8哈夫曼树及其应用 (18)6.8.1 最优二叉树(哈夫曼树) (18)6.8.2 哈夫曼编码 (19)6.9遍历二叉树的非递归算法 (19)6.9.1 先序非递归算法 (19)6.9.2 中序非递归算法 (20)6.9.3 后序非递归算法 (21)第6章二叉树和树6.1 树的定义和基本术语1、树的递归定义1)结点数n=0时,是空树2)结点数n>0时有且仅有一个根结点、m个互不相交的有限结点集——m棵子树2、基本术语结点:叶子(终端结点)、根、内部结点(非终端结点、分支结点);树的规模:结点的度、树的度、结点的层次、树的高度(深度)结点间的关系:双亲(1)—孩子(m),祖先—子孙,兄弟,堂兄弟兄弟间是否存在次序:无序树、有序树去掉根结点非空树森林引入一个根结点3、树的抽象数据类型定义树特有的操作:查找:双亲、最左的孩子、右兄弟结点的度不定,给出这两种操作可以查找到一个结点的全部孩子插入、删除:孩子遍历:存在一对多的关系,给出一种有规律的方法遍历(有且仅访问一次)树中的结点ADT Tree{数据对象:D={a i | a i∈ElemSet, i=1,2,…,n, n≥0}数据关系:若D为空集,则称为空树;若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:(1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2) 若D-{root}≠Ф,则存在D-{root}的一个划分D1, D2, …, D m (m>0)(D i 表示构成第i棵子树的结点集),对任意j≠k (1≤j, k≤m) 有D j∩D k=Ф,且对任意的i (1≤i≤m),唯一存在数据元素x i∈D i, 有<root,x i>∈H(H表示结点之间的父子关系);(3) 对应于D-{root}的划分,H-{<root, x1>,…, <root, x m>}有唯一的一个划分H1, H2, …, H m(m>0)(H i表示第i棵子树中的父子关系),对任意j≠k(1≤j,k≤m)有H j∩H k=Ф,且对任意i(1≤i≤m),H i是D i上的二元关系,(D i, {H i})是一棵符合本定义的树,称为根root的子树。
第六章树和二叉树一、选择题1.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( D ) A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE2.算术表达式a+b*(c+d/e)转为后缀表达式后为( B )A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++3.设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是( C )A. A*B+C/(D*E)+(F-G)B. (A*B+C)/(D*E)+(F-G)C. (A*B+C)/(D*E+(F-G))D. A*B+C/D*E+F-G4.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( D )A.5 B.6 C.7 D.85.在下述结论中,正确的是( D )①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③ B.②③④ C.②④ D.①④6.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是( A )A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定7. 树是结点的有限集合,它( C )根结点,记为T。
其余结点分成为m(m>0)个(A)的集合T1,T2,…,Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。
一个结点的子结点个数称为该结点的(C )。
二叉树与树是两个不同的概念,二叉树也是结点的有限集合,它(A)根结点。
可以把树的根结点的层数定义为1,其他结点的层数等于其父结点所在层数加上1。
令T是一棵二叉树,Ki和Kj是T中子结点数小于2的结点中的任意两个,它们所在的层数分别为λKi和λKj,当关系式│λKi-λKj│≤1一定成立时,则称T为一棵(C)。
供选择的答案:(1)(4) A.有0个或1个 B.有0个或多个 C.有且只有一个 D.有1个或1个以上(2) A.互不相交 B.允许相交 C.允许叶结点相交 D.允许树枝结点相交(3) A.权 B.维数 C.次数 D.序(5) A.丰满树 B.查找树 C.平衡树 D.完全树8.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B )A.9 B.11 C.15 D.不确定9.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为( C )个A.4 B.5 C.6 D.710.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F对应的二叉树根结点的右子树上的结点个数是( D )。
A.M1 B.M1+M2 C.M3 D.M2+M311.具有10个叶结点的二叉树中有( B)个度为2的结点,A.8 B.9 C.10 D.ll12.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( E )A. 250 B.500 C.254 D.505 E.以上答案都不对13.设给定权值总数有n个,其哈夫曼树的结点总数为( D )A.不确定 B.2n C.2n+1 D.2n-114.有n个叶子的哈夫曼树的结点总数为( D )。
A.不确定 B.2n C.2n+1 D.2n-115.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为(C )。
A.n-1 B.⎣n/m⎦-1 C.⎡(n-1)/(m-1)⎤ D.⎡n/(m-1)⎤-1 E.⎡(n+1)/(m+1)⎤-116.有关二叉树下列说法正确的是( B )A.二叉树的度为2 B.一棵二叉树的度可以小于2 C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为217.二叉树的第I层上最多含有结点数为( C)A.2I B. 2I-1-1 C. 2I-1 D.2I -118.一个具有1025个结点的二叉树的高h为( C )A.11 B.10 C.11至1025之间 D.10至1024之间19.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( B )结点A.2h B.2h-1 C.2h+1 D.h+120.对于有n个结点的二叉树,其高度为( D )A.nlog2n B.log2n C.⎣log2n⎦|+1 D.不确定21.一棵具有 n个结点的完全二叉树的树高度(深度)是( A )A.⎣logn⎦+1 B.logn+1 C.⎣logn⎦ D.logn-122.深度为h的满m叉树的第k层有(A )个结点。
(1=<k=<h)A.m k-1 B.m k-1 C.m h-1 D.m h-123.在一棵高度为k的满二叉树中,结点总数为( C )A.2k-1 B.2k C.2k-1 D.⎣log2k⎦+124.高度为 K的二叉树最大的结点数为( C )。
A.2k B.2k-1 C.2k -1 D.2k-1-125. 一棵树高为K的完全二叉树至少有( C )个结点A.2k–1 B.2k-1–1 C.2k-1 D.2k26.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度( C)A.4 B.5 C.6 D.727.利用二叉链表存储树,则根结点的右指针是( C )。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空28.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( C )次序的遍历实现编号。
A.先序 B.中序 C.后序 D.从根开始按层次遍历29.树的后根遍历序列等同于该树对应的二叉树的( B ).A.先序序列B.中序序列C.后序序列30.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用( C )遍历方法最合适。
A.前序 B.中序 C.后序 D.按层次31.在下列存储形式中,哪一个不是树的存储形式?( D )A.双亲表示法 B.孩子链表表示法 C.孩子兄弟表示法 D.顺序存储表示法32.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( B )A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG33.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( A )。
A.CBEFDA B. FEDCBA C. CBEDFA D.不定34.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac , 它的前序遍历是( D )。
A.acbed B.decab C.deabc D.cedba35.某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则前序序列是:BA.E,G,F,A,C,D,B B.E,A,C,B,D,G,F C.E,A,G,C,F,B,D D.上面的都不对36.上题的二叉树对应的森林包括多少棵树( B )A.l B.2 C.3 D.概念上是错误的37.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历: HFIEJKG。
该二叉树根的右子树的根是:CA、 EB、 FC、 GD、 H38.将一棵树t转换为孩子—兄弟链表表示的二叉树h,则t的后根序遍历是h的A.前序遍历 B.中序遍历 C.后序遍历( B )39.某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,… ,n,且有如下性质:T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。
这时是按( B )编号的。
A.中序遍历序列B.前序遍历序列C.后序遍历序列D.层次顺序40.下面的说法中正确的是( B ).(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;(2)按二叉树定义,具有三个结点的二叉树共有6种。
A.(1)(2) B.(1) C.(2) D.(1)、(2)都错41.对于前序遍历与中序遍历结果相同的二叉树为(F);对于前序遍历和后序遍历结果相同的二叉树为(B)。
A.一般二叉树 B.只有根结点的二叉树 C.根结点无左孩子的二叉树D.根结点无右孩子的二叉树 E.所有结点只有左子数的二叉树 F.所有结点只有右子树的二叉树42.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( C )A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树43.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( B )A.都不相同B.完全相同 C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同44.某二叉树的前序序列和后序序列正好相反,则该二叉树一定是(C)的二叉树。
A.空或只有一个结点 B.任一结点无左子树 C.高度等于其结点数 D.任一结点无右子树45.在完全二叉树中,若一个结点是叶结点,则它没( C )。
A.左子结点 B.右子结点 C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点46.在下列情况中,可称为二叉树的是( B )A.每个结点至多有两棵子树的树 B.哈夫曼树 C.每个结点至多有两棵子树的有序树D.每个结点只有一棵右子树 E.以上答案都不对47.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:( D )A.不确定 B. 0 C. 1 D. 248.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:( B )。
A. 0B. 1C. 2D.不确定49.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( C )A.X的双亲B.X的右子树中最左的结点C.X的左子树中最右结点D.X的左子树中最右叶结点50. 引入二叉线索树的目的是( A )A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一51.线索二叉树是一种( C )结构。
A.逻辑 B.逻辑和存储 C.物理 D.线性52.n个结点的线索二叉树上含有的线索数为( C )A.2n B.n-l C.n+l D.n53.( C )的遍历仍需要栈的支持.A.前序线索树 B.中序线索树 C.后序线索树54.二叉树在线索后,仍不能有效求解的问题是( D )。
A.前(先)序线索二叉树中求前(先)序后继 B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱 D.后序线索二叉树中求后序后继55.设F是一个森林,B是由F变换得的二叉树。