数据结构树与二叉树6

合集下载

数据结构课后习题答案及解析第六章

数据结构课后习题答案及解析第六章

第六章树和二叉树(下载后用阅读版式视图或web版式可以看清)习题一、选择题1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。

表示该遗传关系最适合的数据结构为( )。

A.向量B.树 C图 D.二叉树2.树最合适用来表示( )。

A.有序数据元素B元素之间具有分支层次关系的数据C无序数据元素 D.元素之间无联系的数据3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。

A. la (2b (3d,3e),2c)B. a(b(D,e),c)C. a(b(d,e),c)D. a(b,d(e),c)4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。

A. 2h_lB.h C.2h-1 D. 2h5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。

A. 2iB. 2i-lC. 2i+lD. 2i+26.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为 ( )。

A.3B.4C.5D.67.深度为5的二叉树至多有( )个结点。

A. 31B. 32C. 16D. 108.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。

A. 15B. 16C. 17D. 479.题图6-1中,( )是完全二叉树,( )是满二叉树。

..专业知识编辑整理..10.在题图6-2所示的二叉树中:(1)A结点是A.叶结点B根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(2)J结点是A.叶结点B.根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(3)F结点的兄弟结点是A.EB.D C.空 D.I(4)F结点的双亲结点是A.AB.BC.CD.D(5)树的深度为A.1B.2C.3D.4(6)B结点的深度为A.1B.2C.3D.4(7)A结点所在的层是A.1B.2C.3D.4..专业知识编辑整理..11.在一棵具有35个结点的完全二叉树中,该树的深度为( )。

数据结构-6 树和二叉树

数据结构-6 树和二叉树

第六章树和二叉树一.选择题1. 以下说法错误的是。

A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构2. 如图6-2所示的4 棵二叉树中,不是完全二叉树。

图6-2 4 棵二叉树3. 在线索化二叉树中,t 所指结点没有左子树的充要条件是。

A. t->left == NULLB. t->ltag==1C. t->ltag==1 且t->left==NULL D .以上都不对4. 以下说法错误的是。

A.二叉树可以是空集B.二叉树的任一结点最多有两棵子树C.二叉树不是一种树D.二叉树中任一结点的两棵子树有次序之分5. 以下说法错误的是。

A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.在三叉链表上,二叉树的求双亲运算很容易实现C.在二叉链表上,求根,求左、右孩子等很容易实现D.在二叉链表上,求双亲运算的时间性能很好6. 如图6-3所示的4 棵二叉树,是平衡二叉树。

图6-3 4 棵二叉树7. 如图6-4所示二叉树的中序遍历序列是。

A. abcdgefB. dfebagcC. dbaefcgD. defbagc图6-4 1 棵二叉树8. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是。

A. acbedB. decabC. deabcD. cedba9. 如果T2 是由有序树T 转换而来的二叉树,那么T 中结点的前序就是T2 中结点的。

A. 前序B.中序C. 后序D. 层次序10. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是。

A. bdgcefhaB. gdbecfhaC. bdgaechfD. gdbehfca11. 将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双亲结点编号为。

数据结构(C语言版)严蔚敏第6章 树和二叉树

数据结构(C语言版)严蔚敏第6章 树和二叉树
如图6-1(b)中结点H、I、J、K、L、M、N是叶子 结点,而所有其它结点都是分支结点。
⑷ 孩子结点、双亲结点、兄弟结点
一个结点的子树的根称为该结点的孩子结点(child) 或子结点;相应地,该结点是其孩子结点的双亲结点 (parent)或父结点。
4
如图6-1(b)中结点B 、C、D是结点A的子结点,而结 点A是结点B 、C、D的父结点;类似地结点E 、F是结 点B的子结点,结点B是结点E 、F的父结点。
这是树的递归定义,即用树来定义树,而只有 一个结点的树必定仅由根组成,如图6-1(a)所示。
2
2 树的基本术语
⑴ 结点(node):一个数据元素及其若干指向其子树的分支。 ⑵ 结点的度(degree) 、树的度:结点所拥有的子树
的棵数称为结点的度。树中结点度的最大值称为树的度。
A
B
C
D
A
E
F G HI J
同一双亲结点的所有子结点互称为兄弟结点。
如图6-1(b)中结点B 、C、D是兄弟结点;结点E 、 F是兄弟结点。
⑸ 层次、堂兄弟结点
规定树中根结点的层次为1,其余结点的层次等于 其双亲结点的层次加1。
若某结点在第l(l≧1)层,则其子结点在第l+1层。
双亲结点在同一层上的所有结点互称为堂兄弟结点。 如图6-1(b)中结点E、F、G、H、I、J。
(a) 只有根结点
K
LM N
图6-1 树的示例形式
(b) 一般的树
3
如图6-1(b)中结点A的度是3 ,结点B的度是2 ,结点 M的度是0,树的度是3 。
⑶ 叶子(left)结点、非叶子结点:树中度为0的
结点称为叶子结点(或终端结点)。相对应地,度不为 0的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。

数据结构第六章树和二叉树习题及答案

数据结构第六章树和二叉树习题及答案

习题六树和二叉树一、单项选择题1.以下说法错误的是()A. 树形结构的特点是一个结点可以有多个直接前趋B. 线性结构中的一个结点至多只有一个直接后继C. 树形结构可以表达(组织)更复杂的数据D. 树(及一切树形结构)是一种”分支层次”结构E. 任何只含一个结点的集合是一棵树2. 下列说法中正确的是()A. 任何一棵二叉树中至少有一个结点的度为2B. 任何一棵二叉树中每个结点的度都为2C. 任何一棵二叉树中的度肯定等于2D. 任何一棵二叉树中的度可以小于23. 讨论树、森林和二叉树的关系,目的是为了()A. 借助二叉树上的运算方法去实现对树的一些运算B. 将树、森林按二叉树的存储方式进行存储C. 将树、森林转换成二叉树D. 体现一种技巧,没有什么实际意义4.树最适合用来表示()A. 有序数据元素 B .无序数据元素C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F对应的二叉树根结点的右子树上的结点个数是()。

A.M1 B .M1+M2 C .M3 D .M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A.250 B .500 C .254 D .505 E .以上答案都不对8. 设给定权值总数有n 个,其哈夫曼树的结点总数为()A. 不确定 B . 2n C . 2n+1 D . 2n-19.二叉树的第I 层上最多含有结点数为()I I-1 I-1 IA.2IB .2I-1-1 C .2I-1D .2I-110.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+111. 利用二叉链表存储树,则根结点的右指针是()。

数据结构-第6章 树和二叉树---4. 树和森林(V1)

数据结构-第6章 树和二叉树---4. 树和森林(V1)
ElemType data ; struct CSnode *firstchild, *nextsibing ; }CSNode;
6.4.1 树的存储结构
R AB C D EG F
R⋀
A
⋀D
⋀B
⋀E ⋀
C⋀
⋀G
⋀F ⋀
6.4.2 树、森林和二叉树的转换
1. 树转换为二叉树 将树转换成二叉树在“孩子兄弟表示法”中已 给出,其详细步骤是: ⑴ 加线。在树的所有相邻兄弟结点之间加一 条连线。 ⑵ 去连线。除最左的第一个子结点外,父结点 与所有其它子结点的连线都去掉。 ⑶ 旋转。将树以根结点为轴心,顺时针旋转 450,使之层次分明。
B C
D
A E
L HK
M
技巧:无左孩子 者即为叶子结点
6.4.3 树和森林的遍历
1. 树的遍历 由树结构的定义可知,树的遍历有二种方法。 ⑴ 先序遍历:先访问根结点,然后依次先序 遍历完每棵子树等。价于对应二叉树的先序遍历
⑵ 后序遍历:先依次后序遍历完每棵子树,然 后访问根结点。等价于对应二叉树的中序遍历
0 R -1 1A 0 2B 0 3C 0
}Ptree ; R
4D 1 5E 1
AB C
6F 3
7G 6
DE
F
8H 6
9I 6
G H I 10~MAX_Size-1 ... ...
6.4.1 树的存储结构
2. 孩子表示法
每个结点的孩子结点构成一个单链表,即有n 个结点就有n个孩子链表;
n个孩子的数据和n个孩子链表的头指针组成一 个顺序表; 结点结构定义: 顺序表定义:
typedef struct PTNode { ElemType data ;

第6章_数据结构习题题目及答案_树和二叉树_参考答案

第6章_数据结构习题题目及答案_树和二叉树_参考答案

一、基础知识题6.1设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,求树T中的叶子数。

【解答】设度为m的树中度为0,1,2,…,m的结点数分别为n0, n1, n2,…, nm,结点总数为n,分枝数为B,则下面二式成立n= n0+n1+n2+…+nm (1)n=B+1= n1+2n2 +…+mnm+1 (2)由(1)和(2)得叶子结点数n0=1+即: n0=1+(1-1)*4+(2-1)*2+(3-1)*1+(4-1)*1=86.2一棵完全二叉树上有1001个结点,求叶子结点的个数。

【解答】因为在任意二叉树中度为2 的结点数n2和叶子结点数n0有如下关系:n2=n0-1,所以设二叉树的结点数为n, 度为1的结点数为n1,则n= n0+ n1+ n2n=2n0+n1-11002=2n0+n1由于在完全二叉树中,度为1的结点数n1至多为1,叶子数n0是整数。

本题中度为1的结点数n1只能是0,故叶子结点的个数n0为501.注:解本题时要使用以上公式,不要先判断完全二叉树高10,前9层是满二叉树,第10层都是叶子,……。

虽然解法也对,但步骤多且复杂,极易出错。

6.3 一棵124个叶结点的完全二叉树,最多有多少个结点。

【解答】由公式n=2n0+n1-1,当n1为1时,结点数达到最多248个。

6.4.一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。

【解答】由公式n=2n0+n1-1,带入具体数得,500=2n0+n1-1,叶子数是整数,度为1的结点数只能为1,故叶子数为250,度为2的结点数是249。

若完全二叉树有501个结点,则叶子数251,度为2的结点数是250,度为1的结点数为0。

6.5 某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数是多少。

第6章树和二叉树(6)-数据结构教程(Python语言描述)-李春葆-清华大学出版社

第6章树和二叉树(6)-数据结构教程(Python语言描述)-李春葆-清华大学出版社
给定n个结点的集合,结点编号为1~n,再给定一个等价关系,由 等价关系产生所有结点的一个划分,每个结点属于一个等价类, 所有等价类是不相交的。 需要求一个结点所属的等价类,以及合并两个等价类。
1/33
给定n个结点的集合,结点编号为1~n,再给定一个等价关系, 由等价关系产生所有结点的一个划分,每个结点属于一个等价类, 所有等价类是不相交的。 需要求一个结点所属的等价类,以及合并两个等价类。
3
4
1
2
6
7
8
5
9
10
(8,9)
{1,3},{2,4},{5,7},{6},{8,9},{10}
3
4
1
2
6
7
5
9
10
8
18/33
3
4
6
7
9
10
1
2
5
8
(1,2)
{1,2,3,4},{5,7},{6},{8,9},{10}
3
2
1 {1,2,3,4}集合
查找1所在的子集合:3次比较
4 3 2
1 {1,2,3,4}集合
查找1所在的子集合:4次比较
子树高度越小越好
14/33
3
初始状态
parent
1
2
{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}
3
4
5
6
7
8
9
10
(2,4)
{1},{2,4},{3},{5},{6},{7},{8},{9},{10}
6/33
输入关系 初始状态 (2,4) (5,7) (1,3) (8,9) (1,2) (5,6) (2,3)

数据结构习题第六章树和二叉树

数据结构习题第六章树和二叉树

第六章 树和二叉树一、选择题1.已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为ABC*+DE/-,其前缀形式为( )A .-A+B*C/DE B. -A+B*CD/E C .-+*ABC/DE D.-+A*BC/DE【北京航空航天大学 1999 一、3 (2分)】2.算术表达式a+b*(c+d/e )转为后缀表达式后为( )【中山大学 1999 一、5】A .ab+cde/*B .abcde/+*+C .abcde/*++D 3. 设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是( ) 【南京理工大学1999 一、20(2分)】 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-G 4. 设树T 的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T 中的叶子数为( )A .5B .6C .7D .8【南京理工大学 2000 一、8 (1.5分)】5. 在下述结论中,正确的是( )【南京理工大学 1999 一、4 (1分)】①只有一个结点的二叉树的度为0; ②二叉树的度为2; ③二叉树的左右子树可任意交换;④深度为K 的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A .①②③B .②③④C .②④D .①④6. 设森林F 对应的二叉树为B ,它有m 个结点,B 的根为p,p 的右子树结点个数为n,森林F 中第一棵树的结点个数是( )A .m-nB .m-n-1C .n+1D .条件不足,无法确定 【南京理工大学2000一、17(1.5分)】7. 树是结点的有限集合,它( (1))根结点,记为T 。

其余结点分成为m (m>0)个((2))的集合T1,T2, …,Tm ,每个集合又都是树,此时结点T 称为Ti 的父结点,Ti 称为T的子结点(1≤i ≤m )。

云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G

数据结构——用C语言描述(第3版)教学课件第6章 树与二叉树

数据结构——用C语言描述(第3版)教学课件第6章 树与二叉树

6.2 二叉树 6.2.1 二叉树的定义与基本操作 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构
6.2.1 二叉树的定义与基本操作 定义:我们把满足以下两个条件的树型结构叫做二 叉树(Binary Tree): (1)每个结点的度都不大于2; (2)每个结点的孩子结点次序不能任意颠倒。
有序树:在树T中,如果各子树Ti之间是有先后次序的,则称为有序树。 森林:m(m≥0)棵互不相交的树的集合。将一棵非空树的根结点删去,树就变成一 个森林;反之,给森林增加一个统一的根结点,森林就变成一棵树。
同构:对两棵树,通过对结点适当地重命名,就可以使两棵树完全相等(结点对应相 等,对应结点的相关关系也像等),则称这两棵树同构。
二叉树的基本结构由根结点、左子树和右子树组成
如图示
LChild Data RChild
Data
LChild RChild
用L、D、R分别表示遍历左子树、访问根结点、遍 历右子树,那么对二叉树的遍历顺序就可以有:
(1) 访问根,遍历左子树,遍历右子树(记做DLR)。 (2) 访问根,遍历右子树,遍历左子树(记做DRL)。 (3) 遍历左子树,访问根,遍历右子树(记做LDR)。 (4) 遍历左子树,遍历右子树,访问根 (记做LRD)。 (5) 遍历右子树,访问根,遍历左子树 (记做RDL)。 (6) 遍历右子树,遍历左子树,访问根 (记做RLD)。
(8) NextSibling(Tree,x): 树Tree存在,x是Tree中的某个结点。若x不 是其双亲的最后一个孩子结点,则返回x后面的下一个兄弟结点,否则 返回“空”。
基本操作:
(9) InsertChild(Tree,p,Child): 树Tree存在,p指向Tree 中某个结点,非空树Child与Tree不相交。将Child插入Tree中, 做p所指向结点的子树。

计算机专业基础综合数据结构树和二叉树历年真题试卷汇编6_真题(含答案与解析)-交互

计算机专业基础综合数据结构树和二叉树历年真题试卷汇编6_真题(含答案与解析)-交互

计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编6(总分88, 做题时间90分钟)1. 单项选择题1.一棵完全二叉树又是一棵( )。

【华中科技大学2006一、7(2分)】SSS_SINGLE_SELA 平衡二叉树B 堆C 二叉排序树D 哈夫曼(Huffman)树分值: 2答案:B解析:完全二叉树的叶子至多在下面两层上,且一个结点若无左子树,绝不能有右子树。

平衡二叉树任何结点的左右子树的高度差的绝对值不超过1,但其结点的值符合二叉排序树的定义。

平衡二叉树(包括二叉排序树)的树形不一定是完全二叉树。

堆是一个序列,有大堆和小堆,编号为i的结点,其父结点、左右子女结点之间位置的关系,符合完全二叉树父结点、左右子女结点之间的关系,从这点上说,可以把堆看成完全二叉树。

哈夫曼树是二叉树,但树形不一定满足完全二叉树的定义。

2.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是( )。

【合肥工业大学1999一、5(2分)】SSS_SINGLE_SELA 不确定B 0C 1D 2分值: 2答案:D解析:左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域。

3.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是( )。

【合肥工业大学2000一、5(2分)】SSS_SINGLE_SELA 0B 1C 2D 不确定分值: 2答案:B4.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。

【南京理工大学1996一、6(2分)】SSS_SINGLE_SELA X的双亲B X的右子树中最左的结点C X的左子树中最右结点D X的左子树中最右叶结点分值: 2答案:C5.引入二叉线索树的目的是( )。

【南京理工大学1998一、5(2分)】SSS_SINGLE_SELA 加快查找结点的前驱或后继的速度B 为了能在二叉树中方便地进行插入与删除C 为了能方便地找到双亲D 使二叉树的遍历结果唯一分值: 2答案:A6.线素二叉树是一种( )结构。

数据结构第六章:树和二叉树

数据结构第六章:树和二叉树

性质2:深度为 的二叉树至多有 个结点(k≥ 性质 :深度为k的二叉树至多有2 k 1 个结点 ≥1)
证明:由性质 ,可得深度为k 证明:由性质1,可得深度为 的二叉树最大结点数是
(第i层的最大结点数 ) = ∑ 2 i 1 = 2 k 1 ∑
i =1 i =1
k
k
10
性质3:对任何一棵二叉树 ,如果其终端结点数(即 性质 :对任何一棵二叉树T,如果其终端结点数 即 叶节点)为 度为2的结点数为 的结点数为n 叶节点 为n0,度为 的结点数为 2,则n0=n2+1 证明: 为二叉树 中度为1的结点数 为二叉树T中度为 证明:n1为二叉树 中度为 的结点数 因为:二叉树中所有结点的度均小于或等于2 因为:二叉树中所有结点的度均小于或等于 所以:其结点总数n=n0+n1+n2 所以:其结点总数 又二叉树中,除根结点外, 又二叉树中,除根结点外,其余结点都只有一个 分支进入; 分支进入; 为分支总数, 设B为分支总数,则n=B+1 为分支总数 又:分支由度为1和度为 的结点射出,∴B=n1+2n2 分支由度为 和度为2的结点射出, 和度为 的结点射出 于是, 于是,n=B+1=n1+2n2+1=n0+n1+n2 ∴n0=n2+1
7
结点A的度:3 结点 的度: 的度 结点B的度:2 结点 的度: 的度 结点M的度:0 结点 的度: 的度 结点A的孩子: , , 结点 的孩子:B,C,D 的孩子 结点B的孩子 的孩子: , 结点 的孩子:E,F 树的度: 树的度:3 E K 结点A的层次: 结点 的层次:1 的层次 结点M的层次 的层次: 结点 的层次:4 L B F A C G H M

第6章_数据结构习题题目及答案_树和二叉树_参考答案

第6章_数据结构习题题目及答案_树和二叉树_参考答案

一、基础知识题6.1设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,求树T中的叶子数。

【解答】设度为m的树中度为0,1,2,…,m的结点数分别为n0, n1, n2,…, nm,结点总数为n,分枝数为B,则下面二式成立n= n0+n1+n2+…+nm (1)n=B+1= n1+2n2 +…+mnm+1 (2)由(1)和(2)得叶子结点数n0=1+即: n0=1+(1-1)*4+(2-1)*2+(3-1)*1+(4-1)*1=86.2一棵完全二叉树上有1001个结点,求叶子结点的个数。

【解答】因为在任意二叉树中度为2 的结点数n2和叶子结点数n0有如下关系:n2=n0-1,所以设二叉树的结点数为n, 度为1的结点数为n1,则n= n0+ n1+ n2n=2n0+n1-11002=2n0+n1由于在完全二叉树中,度为1的结点数n1至多为1,叶子数n0是整数。

本题中度为1的结点数n1只能是0,故叶子结点的个数n0为501.注:解本题时要使用以上公式,不要先判断完全二叉树高10,前9层是满二叉树,第10层都是叶子,……。

虽然解法也对,但步骤多且复杂,极易出错。

6.3 一棵124个叶结点的完全二叉树,最多有多少个结点。

【解答】由公式n=2n0+n1-1,当n1为1时,结点数达到最多248个。

6.4.一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。

【解答】由公式n=2n0+n1-1,带入具体数得,500=2n0+n1-1,叶子数是整数,度为1的结点数只能为1,故叶子数为250,度为2的结点数是249。

若完全二叉树有501个结点,则叶子数251,度为2的结点数是250,度为1的结点数为0。

6.5 某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数是多少。

数据结构 第六章 树和二叉树

数据结构 第六章  树和二叉树

F
G
H
M
I
J
结点F,G为堂兄弟 结点A是结点F,G的祖先
5
树的基本操作
树的应用很广,应用不同基本操作也不同。下面列举了树的一些基本操作: 1)InitTree(&T); 2)DestroyTree(&T); 3)CreateTree(&T, definition); 4)ClearTree(&T); 5)TreeEmpty(T); 6)TreeDepth(T); 7) Root(T); 8) Value(T, &cur_e); 9) Assign(T, cur_e, value); 10)Paret(T, cur_e); 11)LeftChild(T, cur_e); 12)RightSibling(T, cur_e); 13)InsertChild(&T, &p, i, c); 14)DeleteChild(&T,&p, i); 15)TraverseTree(T, Visit( ));
1
2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1
3
5 7
证明:设二叉树中度为1的结点个数为n1 根据二叉树的定义可知,该二叉树的结点数n=n0+n1+n2
又因为在二叉树中,度为0的结点没有孩子,度为1的结点有1 个孩子,度为2的结点有2个结孩子,故该二叉树的孩子结点 数为 n0*0+n1*1+n2*2(分支数) 而一棵二叉树中,除根结点外所有都为孩子结点,故该二叉 树的结点数应为孩子结点数加1即:n=n0*0+n1*1+n2*2+1
文件夹1
文件夹n

严蔚敏《数据结构》教学笔记第六章 树和二叉树

严蔚敏《数据结构》教学笔记第六章 树和二叉树

来自
转载请注明
严蔚敏数据结构教学笔记
CountLeaf( T->rchild, count); // 统计右子树中叶子结点个数 } }
2、求二叉树的深度(后序遍历) int Depth (BiTree T ) { if ( !T ) depthval = 0; else { depthLeft = Depth( T->lchild ); depthRight= Depth( T->rchild ); depthval = 1 + (depthLeft> depthRight?depthLeft:depthRight); } return depthval; }
五、遍历算法的应用举例: 1、统计二叉树中叶子结点的个数(先序遍历) void CountLeaf (BiTree T, int& count) { if ( T ) { if ((!T->lchild)&& (!T->rchild)) count++; CountLeaf( T->lchild, count); // 统计左子树中叶子结点个数 9
LeftChild(T, cur_e); RightSibling(T, cur_e);
TreeEmpty(T); TreeDepth(T);
TraverseTree(T, Visit()); 插入: InitTree(&T); CreateTree(&T, definition);
Assign(T, cur_e, value); InsertChild(&T, &p, i, c); 1
3、复制二叉树(后序遍历) // 生成一个二叉树的结点 BiTNode *GetTreeNode(TElemType item, BiTNode *lptr , BiTNode *rptr ){ if (!(T = (BiTNode*)malloc(sizeof(BiTNode)))) 10

数据结构课后习题答案第六章

数据结构课后习题答案第六章
(1) 前序遍历序列和中序遍历序列相同。 (2) 中序遍历序列和后序遍历序列相同。 (3) 前序遍历序列和后序遍历序列相同。
欢迎下载
6
-
9.已知信息为“ ABCD BCD CB DB ACB ”,请按此信息构造哈夫曼树,求出每一字符的最优编码。 10. 己知中序线索二叉树采用二叉链表存储结构,链结点的构造为:
_,双分支结点的个数为 ____, 3 分支结点的个数为 ____, C 结点的双亲结点为 ____ ,其孩子结点为 ____。
5. 一棵深度为 h 的满 k 叉树有如下性质:第 h 层上的结点都是叶子结点,其余各层上的每个结点都有
k 棵非空子树。
如果按层次顺序(同层自左至右)从 1 开始对全部结点编号,则:
7.二叉树的遍历分为 ____ ,树与森林的遍历包括 ____。 8.一棵二叉树的第 i(i>=1) 层最多有 ____ 个结点;一棵有 n(n>0) 个结点的满二叉树共有 ____ 个叶子和 ____个非终端结点。
9.在一棵二叉树中,假定双分支结点数为 5 个,单分支结点数为 6 个,则叶子结点为 ____个。
A. 逻辑 B.逻辑和存储 C.物理 D.线性 19.由权值分别是 8,7, 2, 5 的叶子结点生成一棵哈夫曼树,它的带权路径长度为
A. 23 B. 37 C. 46 D. 43 20.设 T 是哈夫曼树,具有 5 个叶结点,树 T 的高度最高可以是 ( )。
A.2 B . 3 C. 4 D. 5
()
6.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树。
()
7.由于二叉树中每个结点的度最大为 2,所以二叉树是一种特殊的树。 8.二叉树的前序遍历序列中,任意一个结点均处在其子树结点的前面。

数据结构第6章树和二叉树

数据结构第6章树和二叉树

数据结构第6章树和⼆叉树第六章树和⼆叉树⼀、选择题1.已知⼀算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( )A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE2.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶⼦数为()A.5 B.6 C.7 D.83.在下述结论中,正确的是()①只有⼀个结点的⼆叉树的度为0; ②⼆叉树的度为2;③⼆叉树的左右⼦树可任意交换;④深度为K的完全⼆叉树的结点个数⼩于或等于深度相同的满⼆叉树。

A.①②③ B.②③④ C.②④ D.①④4.设森林F对应的⼆叉树为B,它有m个结点,B的根为p,p的右⼦树结点个数为n,森林F中第⼀棵树的结点个数是()A.m-n B.m-n-1 C.n+1 D.条件不⾜,⽆法确定5.⼀棵完全⼆叉树上有1001个结点,其中叶⼦结点的个数是()A.250 B. 254 C.500 D.5016.设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-17.有关⼆叉树下列说法正确的是()A.⼆叉树的度为2 B.⼀棵⼆叉树的度可以⼩于2 C.⼆叉树中⾄少有⼀个结点的度为2 D.⼆叉树中任何⼀个结点的度都为2 8.⼆叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -19.⼀个具有1025个结点的⼆叉树的⾼h为()A.11 B.10 C.11⾄1025之间 D.10⾄1024之间10.⼀棵⼆叉树⾼度为h,所有结点的度或为0,或为2,则这棵⼆叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111.⼀棵具有 n个结点的完全⼆叉树的树⾼度(深度)是()A.?log2n?+1 B.log2n+1 C.?log2n? D.log2n-112.深度为h的满m叉树的第k层有()个结点。

数据结构详细教案——树与二叉树

数据结构详细教案——树与二叉树

数据结构教案第六章树与二叉树目录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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2
2> 基本概念
结点的度: 叶结点 : 分枝结点: 树的度 : 孩子 : 双亲 : 兄弟 : 祖先 : 结点拥有子树的数目 结点的度为零的结点 结点的度非零的结点 i 树中各结点度的最大值 j,k,l 称为 i 的孩子 j k l i 称为 j,k,l 的双亲 j,k,l 互为兄弟 树的根结点到某结点 j 路径上的所有结点,为结点 j的祖先 子孙 : 结点 i 下的所有结点,称为结点 i 的子孙 结点层次: 从根结点到某结点 j 路径上结点的数目
clear(T)
清除
5
第二节 二叉树
1> 定义:
二叉树是n(n>=0)个结点组成的有序树,每个结点至多有 二棵子树,称为左子树和右子树, n=0 称为空树。 Btree=Null Btree A Btree A Btree A
Btree
A
6
2> 二叉树的基本操作
initial(BT) 初始化 root(BT) 返回根结点 parent(BT,x) 返回结点 x 的双亲 lchild(BT,x) 返回结点 x 的左孩子 rchild(BT,x) 返回结点 x 的右孩子 crt_bt(x,LBT,RBT) 生成一棵以 x 为根,LBT,RBT 为子树的树 ins_lchild(BT,y,x) 把 x作为y的左子树插入 ins_rchild(BT,y,x) 把 x作为y的右子树插入 del_lchild(BT,y) 删除结点y的左子树 del_rchild(BT,y) 删除结点y的右子树 traverse(BT) 遍历 clear(BT) 清除
例如:
a b d
a
a ^
c
^ b ^ c ^
^ c ^
^ b ^ d ^
^ c
^
12
第三节 二叉树的遍历
非空二叉树可看成三部分组成: 根 左子树 右子树 左子树和右子树仍然是二叉树. Btree A 根
左子树
右子树
遍历的访问顺序有三种: 1 >先序访问: 根 左子树 右子树 2 >中序访问: 左子树 根 右子树 3 >后序访问: 左子树 右子树 根
8
定义: 深度为 k 且有2k -1 个结点的二叉树称为满二叉树 1 1 3 6 7 4
2
2
3
4
5
5
结点左上角的数字为满二叉树的位置编号 定义: 深度为 k 且有 n 个结点的二叉树,当且仅当 n 个结 点都满足满二叉树的位置编号的升序排列结构时, 称为完全二叉树
9
性质4:具有 n 个结点的完全二叉树深度为
1 2 3 4
5
6
21
3 孩子兄弟表示法 用二叉树的左指针指向该结点的第一个孩子,右指针指向该结 点的下一个兄弟. 结点: child 1 2 3 4 ^ 5 6 5 ^ 4 ^ data brother ^ 2 3 1 ^
^
6 ^
孩子兄弟表示法
22
二 树的遍历 1 先根访问 先访问根,然后依次访问子树. 2 后根访问 先依次访问子树,然后访问根. 例如:
3
树的深度: 树中结点的最大层次 有序树 : 若树中结点的各子树从左到右是有次序的,称 该树为有序树,否则为无序树 森林 : 由 m 棵互不相交的树构成 F=(T1,T2,.......Tm)
森林可以通过虚设一根结点连成一棵树 T=(root,F)
root F E
B
F
C
D J
G H I
4
3> 树的基本操作
15
非递归中序算法 Void inorder(bt) { initstack(s);push(s,bt); while (!empty(s)) { while (gettop(s,p)&&p) push (s,p->lchild); pop(s,p); if (!empty(s)) { pop(s,p); visit(p->data); push(s,p->rchild) } } }
初始化栈
寻找最左 下端的结点 去掉栈顶空子针 访问结点 右指针进栈
例如:
1 2 3
4
初始化栈
1
16
非递归前序算法 Void preorder(bt) { initstack(s);push(s,bt); if !bt visit(bt); 初始化栈 例如: 1 while (!empty(s)) { while (gettop(s,p)&&p) 2 { push (s,p->lchild); if !p->lchild visit(p->lchild );} pop(s,p); 去掉栈顶空子针 4 if (!empty(s)) { pop(s,p); push(s,p->rchild) ; 右指针进栈 初始化栈 if !p->rchild visit(p->rchild );} } }
10
4>二叉树的存储结构
(1)顺序存储结构
分配2k -1个空间 结点按满二叉树编号存储 物理位置确定了结点间的关系 例如: 2 1
a
3 6
a b c 1 2 3
4
d e 5 6
7
b
5
c
7
4
d
e
11
(2)链式存储结构
二叉结构
三叉结构 lchild data rchild lchild data parent rchild
25
示例: W= { 1,2,3,4,5} 15 1> F= { 1,2,3,4,5} 6 2> F= { 3,3,4,5} 3> F= { 6,4,5}
3
9
4> F= { 6,9} 2 w2 3 w3 4 w4 5 w5 5> F= { 15}
1 w1
26
27
3
1
17
内循环
pop
pop-v
push
第1次外循环
Null 2 1 Null 4 1
2 1
1
4 1
第2次外循环
4 1
1
Null 1
第3次外循环
Null 1 Null 3
1
3
第4次外循环
3
Null
18
第四节 树
一 树的存储结构 1 双亲表示法 用一组连续的空间存放结点,每个结点用一个域表示该结点的 双亲. 1 2 3 4
7
3>二叉树的性质
性质1: 在二叉树的 i 层上至多有 2i -1个结点。(归纳法证明) 性质2: 深度为 k 的二叉树,至多有 2k -1 个结点。(等比求和) 性质3: 对任意二叉树 BT ,若叶结点数为 n0 ,度为 2 的结点数 为 n2,则 n0 = n2 +1 证明: ∵ n= n0+ n1 + n2 (n为结点总数) b= n1 +2 n2 (b 为分支总数) b=n-1 (除根结点外,任一结点都有一分支连入) ∴ n= n1 +2 n2 +1 代入第一等式,得: n0 = n2 +1 证毕
1 2 3 4 5 6 0 1 1 1 3 3
5
6 双亲表示法
19
2 孩子表示法 (1)多叉链表表示法 结点: data L1 L2 ............. Ln
1
1 2^ ^ ^ 2 3 4 5 ^ ^ ^ 6 ^ ^ ^ 3 ^ 4 ^ ^ ^
5
6
多叉链表表示法
20
(2)多重线性链表表示法 把每个结点的孩子组成一个线性链表. 结点: data 1 2 3 4 5 6 L 2 ^ 5 ^ ^ ^ 多重线性链表表示法 6 ^ 3 4 ^
initial(T) root(T) parent(T,x) 初始化 返回根结点 返回结点 x 的双亲
child(T,x,i)
crt_tree(x,F) del_child(T,y,i) traverse(T)
返回结点 x 的第i 个孩子
生成一棵以 x 为根,F 为子树的树
ins_child(T,y,i,x) 把 x 插入到 y的第i棵子树处 删除结点y的第i棵子树 遍历
第六章 树与二叉树
第一节 树的基本概念
1> 定义: 树是n(n>=0)个结点组成的有限集。 n=0 称为空树;n>=1则树是由一个根结点 和互不相交的子树构成 。
1
tree=Null
tree A
tree A
B
E n=0 (1) n=1 (2) F
C
D
J
G H I n=10 (3)
(3)中有10个结点,可以看成一个根结点和三棵子树 构成。子树仍然满足树的定义。

k=1
n
wk Lk
n 为叶结点数; wk为叶结点权值; Lk 为叶结点的路径长度
24
定义: 设有n 个权值 {w1,w2,......wn},任意构造有 n 个叶结
点的二叉树,每个叶结点权值为 wi 。则其中带权路径长 度最小的二叉树称为哈夫曼树(最优二叉树)。
二 哈夫曼树的构造方法
(1) 根据给定的 {w1,w2,......wn}, 生成 n 棵树的森林, F= {T1,T2,.......Tm};根结点值为权值; (2) 在 F 中选择两棵根结点值最小的树 Ti ,Tj 作为左右子树, 构成一棵新二叉树Tk , Tk根结点值为Ti ,Tj根结点权值之 和; (3) 在 F 中删除Ti ,Tj ,并把 Tk 加到 F中; (4) 重复 (2) (3),直到 F中只含一棵树。
log 2 n
+1
性质5:对结点数为 n 的完全二叉树,第 i 个结点有如下特征: (1) 若 i =1 则 i 为根结点,无双亲 若 i >1 则双亲为 parent(i) = i / 2 ; (2) 若 2i>n 则 i 无孩子,为叶结点 否则 lchild(i)=2 i ; (3) 若 2i+1>n 则 i 无右孩子 否则 rchild(i)=2 i+1。
相关文档
最新文档