数据结构第5章 树和二叉树
5(选讲)树和二叉树解析
树。所以树的定义是递归的 。
2018/10/13 8
2.树的基本术语
树的结点包含一个数据元素及若干指向其子树的分支。
1. 树的结点:包含一个DE和指向其子树的所有分支; 2. 结点的度:一个结点拥有的子树个数,度为零的结点称为叶结点; 3. 树的度:树中所有结点的度的最大值 Max(D(I)) 含义:树中最大分支数为树的度; 4. 结点的层次及树的深度:根为第一层,根的孩子为第二层,若某结 点为第k层,则其孩子为k+1层. 树中结点的最大层次称为树的深度或高度 5.森林:是m(m>=0)棵互不相的树的集合 森林与树概念相近,相互很容易转换. 6 .有序树、无序树 如果树中每棵子树从左向右的排列拥有一定的 顺序,不得互换,则称为有序树,否则称为无序树。
广度优先(按层次)遍历定义为:先访问第一层结点(即树根结点), 再从左至右访问第二层结点,依次按层访问 ……,直到树中结点全部被 访问为止。对图6-6 (a)中的树进行按层次遍历得到树的广度优先遍历序 列为:ABCDEFG。 说明: ① 前序遍历一棵树恰好等价于前序遍历该树所对应的二叉树。(6.2 节将介绍二叉树) ② 后序遍历树恰好等价于中序遍历该树所对应的二叉树。
2018/10/13 13
树的先序遍历算法描述如下: void Preorder(Btree *root) { if (root!=NULL) {printf(“%c\n”,root->data); //访问根结点 //先根遍历k叉树
for(i=0;i<k;i++)
preorder(root->t[i]); //递归前序遍历每一个子结点 }
祖父 家族关系表示: R={<祖父,伯父>,<祖父,父亲>,<祖父,叔父>, <伯父,堂兄>,<伯父,堂姐>,<父亲,本人>, <叔父,堂弟>,<堂兄,侄儿>}
《数据结构及其应用》笔记含答案 第五章_树和二叉树
第5章树和二叉树一、填空题1、指向结点前驱和后继的指针称为线索。
二、判断题1、二叉树是树的特殊形式。
()2、完全二叉树中,若一个结点没有左孩子,则它必是叶子。
()3、对于有N个结点的二叉树,其高度为。
()4、满二叉树一定是完全二叉树,反之未必。
()5、完全二叉树可采用顺序存储结构实现存储,非完全二叉树则不能。
()6、若一个结点是某二叉树子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
()7、不使用递归也可实现二叉树的先序、中序和后序遍历。
()8、先序遍历二叉树的序列中,任何结点的子树的所有结点不一定跟在该结点之后。
()9、赫夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
()110、在赫夫曼编码中,出现频率相同的字符编码长度也一定相同。
()三、单项选择题1、把一棵树转换为二叉树后,这棵二叉树的形态是(A)。
A.唯一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子解释:因为二叉树有左孩子、右孩子之分,故一棵树转换为二叉树后,这棵二叉树的形态是唯一的。
2、由3个结点可以构造出多少种不同的二叉树?(D)A.2 B.3 C.4 D.5解释:五种情况如下:3、一棵完全二叉树上有1001个结点,其中叶子结点的个数是(D)。
A.250 B. 500 C.254 D.501解释:设度为0结点(叶子结点)个数为A,度为1的结点个数为B,度为2的结点个数为C,有A=C+1,A+B+C=1001,可得2C+B=1000,由完全二叉树的性质可得B=0或1,又因为C为整数,所以B=0,C=500,A=501,即有501个叶子结点。
4、一个具有1025个结点的二叉树的高h为(C)。
A.11 B.10 C.11至1025之间 D.10至1024之间解释:若每层仅有一个结点,则树高h为1025;且其最小树高为⎣log21025⎦ + 1=11,即h在11至1025之间。
数据结构答案第5章
第 5 章树和二叉树1970-01-01第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n≥0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m(m>0)个()的集合,每个集合都是根结点的子树。
【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。
【解答】度,孩子,双亲⑶一棵二叉树的第i(i≥1)层最多有()个结点;一棵有n(n>0)个结点的满二叉树共有()个叶子结点和()个非终端结点。
【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。
⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。
【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。
⑸深度为k的二叉树中,所含叶子的个数最多为()。
【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。
⑹具有100个结点的完全二叉树的叶子结点数为()。
【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。
⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。
则该树中有()个叶子结点。
【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。
⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。
【解答】CDBGFEA【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。
数据结构第5章课件 中国石油大学(华东)
二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d
数据结构-C语言-树和二叉树
练习
一棵完全二叉树有5000个结点,可以计算出其
叶结点的个数是( 2500)。
二叉树的性质和存储结构
性质4: 具有n个结点的完全二叉树的深度必为[log2n]+1
k-1层 k层
2k−1−1<n≤2k−1 或 2k−1≤n<2k n k−1≤log2n<k,因为k是整数
所以k = log2n + 1
遍历二叉树和线索二叉树
遍历定义
指按某条搜索路线遍访每个结点且不重复(又称周游)。
遍历用途
它是树结构插入、删除、修改、查找和排序运算的前提, 是二叉树一切运算的基础和核心。
遍历规则 D
先左后右
L
R
DLR LDR LRD DRL RDL RLD
遍历规则
A BC DE
先序遍历:A B D E C 中序遍历:D B E A C 后序遍历:D E B C A
练习 具有3个结点的二叉树可能有几种不同形态?普通树呢?
5种/2种
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
(a + b *(c-d)-e/f)的二叉树
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
二叉树的抽象数据类型定义
特殊形态的二叉树
只有最后一层叶子不满,且全部集中在左边
数据结构 第五章树答案
第五章 树(答案)一、选择题1、二叉树的第i 层最多有( )个结点。
A .2i B. 2i C. 2i-1 D.2i -12.对于一棵满二叉树,高度为h ,共有n 个结点,其中有m 个叶子结点,则( )A .n=h+m B.h+m=2n C.m=h-1 D.n=2h -1 3.在一棵二叉树中,共有16个度为2的结点,则其共有( )个叶子结点。
A .15 B.16 C.17 D.184. 一棵完全二叉树中根结点的编号为1,而且编号为23的结点有左孩子但没有右孩子,则此树中共有( )个结点。
A .24 B.45 C.46 D.47 5.下述编码那一组不是前缀码( )A .00,01,10,11 B.0,1,00,11 C.0,10,110,111 D.1,01,001,000 6.某二叉树的中序序列和后序序列相同,则这棵二叉树必然是( )A .空树B .空树或任一结点均无左孩子的非空二叉树C .空树或任一结点均无右孩子的非空二叉树D .空树或仅有一个结点的二叉树7.设n,m 为一棵二叉树上的两个结点,在中序遍历时,n 在m 前的条件是( )A .n 在m 的右边 B.n 是m 的祖先C .n 在m 的左边 D.n 是m 的子孙8、假定中根遍历二叉树的定义如下:若二叉树为非空二叉树,则中根遍历根的右子树;访问根结点;中根遍历根的左子树。
按此定义遍历下图所示的二叉树,遍历的结果为: A 、 DBEAFHGC A B 、 C GHFADBE B C C 、 E BDAFHGC E D FD 、 FHGCADBE GH9、文中出现的字母为A 、B 、C 、D 和E ,每个字母在电文中出现的次数分别为9、27、3、5和11。
按哈夫曼编码(构造时左小右大),则字母C 的编码应是:A 、10B 、0110C 、1110D 、1100 10、设树T 的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T 中的叶子数为( )A .5B .6C .7D .8 11.算术表达式a+b*(c+d/e )转为后缀表达式后为( )A .ab+cde/*B .abcde/+*+C .abcde/*++D .12. 设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是( )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-G13.已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为ABC*+DE/-,其前缀形式为( ) A .-A+B*C/DE B. -A+B*CD/E C .-+*ABC/DE D. -+A*BC/DE14.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )A .9B .11C .15D .不确定15.树的后根遍历序列等同于该树对应的二叉树的( ).A. 先序序列B. 中序序列C. 后序序列16.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( )。
《数据结构与算法设计》第5章 树
5.2.2 二叉树的性质
➢ 满二叉树和完全二叉树
满二叉树是指深度为h且节点数取得最大值2h-1的二叉树。 如果一棵深度为h的二叉树,除第h层外,其他每层的节点数 都达到最大,且最后一层的节点自左而右连续分布,这样的二 叉树称为完全二叉树。
5.2.2 二叉树的性质
5.2.2 二叉树的性质
性质6 对含有n个节点的完全二叉树自上而下、同一层从左往右 对节点编号0,1,2,…,n-1,则节点之间存在以下关系: (1)若i=0,则节点i是根节点,无双亲;若i>0,则其双亲节 点的编号为i/2-1; (2)若2×i +1≤n,则i的左孩子编号为2×i+1; (3)若2×i+2≤n,则i的右孩子编号为2×i+2; (4)若i>1且为偶数,则节点i是其双亲的右孩子,且有编号为 i-1的左兄弟; (5)若i<n-1且为奇数,则节点i是其双亲的左孩子,且有编号 为i+1的右兄弟。
5.3.3 二叉树的二叉链表类模板定义
//根据二叉树的先序遍历序列和中序遍历序列创建以r为根的二叉树
void CreateBinaryTree(BTNode<DataType> * &r, DataType pre[], DataType
in[], int preStart, int preEnd, int inStart, int inEnd); int Height(BTNode<DataType> *r); //求以r为根的二叉树高度 //求以r为根的二叉树中叶子节点数目
5.1.2 树的术语
(9)节点的层次:从根节点开始,根为第一层,根的孩子为 第二层,根的孩子的孩子为第三层,依次类推,树中任一节 点所在的层次是其双亲节点所在的层次数加1。 (10)堂兄弟:双亲在同一层的节点互为堂兄弟。
数据结构(树与二叉树)习题与答案
一、单选题1、已知一算术表达式的中缀形式为 A-B/C+D*E,前缀形式为+-A/BC*DE,其后缀形式为( )。
A.ABC/-DE*+B.AB/C-D*E+C. A-BC/DE*+D. ABCDE/-*+正确答案:A2、有关二叉树下列说法正确的是()。
A.二叉树中任何一个结点的度都为2B.一棵二叉树的度可以小于2C.二叉树中每个结点的度都为2D.二叉树中至少有一个结点的度为2正确答案:B3、在一棵高度为k的满二叉树中,结点总数为()。
A.2k-1B. 2k-1C. 2k-1+1D.2k正确答案:B4、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A.不确定B.60C.59D.61正确答案:C解析:任意二叉树中,n0=n2+15、高度为7的完全二叉树,最少有()个结点。
A.127B.128C.63D.64正确答案:D解析:前6层都是满的,最后一层(第7层)近1个结点。
可保证题目条件。
6、高度为7的二叉树,最少有()个结点。
A.7B.127C.13D.64正确答案:A解析:每层只有1个结点。
共7个即可构成一个高度为7的二叉树。
7、对任意一棵有n个结点的树,这n个结点的度之和为( )。
A.n-1B.2*nC.n+2D.n正确答案:A解析:所有结点的度之和为分支个数,分支个数即为结点个数-18、在下列存储形式中,()不是树的存储形式。
A.双亲表示法B.孩子-兄弟表示法C.孩子链表表示法D.顺序存储表示法正确答案:D9、对二叉树中的结点进行编号,要求根结点的编号最小,左孩子结点编号比右孩子结点编号小。
则应该采用()遍历方法对其进行编号。
A.层次B.先序C.后序D.中序正确答案:B10、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A. 59B.61C.60D.不一定正确答案:A11、树的后根遍历,相当于对应二叉树的()遍历。
A.中序B.后序C.层次D.先序正确答案:A二、判断题1、完全二叉树一定存在度为1的结点。
《数据结构》第五章习题参考答案
《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。
( ×)2、二叉树的左右子树可任意交换。
(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。
(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。
( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
(×)8、度为2的树就是二叉树。
(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。
A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。
A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。
该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。
①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。
A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。
A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。
2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。
自考软件基础(数据结构--树与二叉树)
B
C
D
E
F
G
H
I
J
第 5 /209页
第二节 二叉树
一、定义
南昌大学
二叉树是一种重要的树形结构,它的特点是:二叉树可以为空(节点个
数为0),任何一个节点的度都小于或等于2,并且,子树有左、右之分,
其次序不能任意颠倒。 二叉树有5种基本形态,如图10-2所示。
第 6 /209页
第二节 二叉树
南昌大学
struct node
{ datatype data; struct node *Lchild,*rchild:
};
第 15 /209页
第二节 二叉树
南昌大学
例10-5 写出图10-8a所示二叉树的链式存储结构。其链式结构如图10-8b 所示。可以看出:具有n个节点的二叉树链式存储共有2n个链,其中只 有n-1个用来存放该节点的左、右孩子,其余的n +1个指针域为空。
解:第一步:由后序遍历结果确定整个二叉树根为A,由中序结果确定
A的左、右子树。 后序遍历结果: 中序遍历结果:
第 24 /209页
第三节 二叉树的遍历
第二步:确定A的左子树。 1)后序遍历结果:
南昌大学
中序遍历结果:
2)确定B的右子树: ①后序遍历结果:
第 25 /209页
第三节 二叉树的遍历
②中序遍历结果:
南昌大学
第 9 /209页
第二节 二叉树
下面介绍两种特殊的二叉树。
南昌大学
(1) 满二叉树指深度为k,且有2k-1个节点的二叉树。或者说除叶子节点外,
其它节点的度都为2的二叉树。
(2) 完全二叉树一个满二叉树的最下层从右向左连续缺少n (n>=0)个节点 的二叉树。 图10-3为满二叉树和完全二叉树示例。
数据结构第五章参考答案
习题51.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)3个结点可构成(___________)棵不同形态的二叉树。
答案:5(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n>1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n-1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)(7)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n-1(8)设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT (X)的编号为()。
答案:24(10)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(11)(12)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________)。
答案:68(13)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(14)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________)。
答案:ABCDEF(15)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
05二叉树
}
if (Parent->Lchild == NULL) /* Parent所指结点左子树为空 */ Parent->Lchild = ptr;
else
{
/* Parent所指结点左子树非空 */
ptr->Lchild = Parent->Lchild;
Parent->Lchild = ptr;
}
二叉树可以是空的,空二叉树没有任何结 点; 二叉树上的每个结点最多可以有两棵子树, 这两棵子树是不相交的; 二叉树上一个结点的两棵子树有左、右之 分,次序是不能颠倒的。
图5-2 两棵不同的二叉树
从二叉树中的一个结点往下,到达它的 某个子、孙结点时所经由的路线,称为一条 “路径”。对于路径来说,从开始结点到终 止结点,中间经过的结点个数,称为路径的 “长度”。从根结点开始、到某个结点的路 径长度,称为该结点的“深度”。
一棵一般的二叉树,是由如下的3类结点组成的: 根结点——二叉树的起始结点; 分支(或内部结点)——至少有一个非空子树 (即度为1或2)的结点 叶结点——没有非空子树(即度为0)的结点。 有两种特殊的二叉树:满二叉树和完全二叉树。
所谓“满二叉树”,是指该二叉树的每 一个结点,或是有两个非空子树的结点,或 是叶结点,且每层都必须含有最多的结点个 数。
性质5-2 树高为k(k≥0)的二叉树, 最多有2k+1−1个结点。 【证明】由性质5-1可知,在树高为k的 二叉树里,第0层有20个结点,第1层有21个 结点,第2层有22个结点,„„,第k层有2k 个结点。因此,要求出树高为k的二叉树的 结点个数,就是求和:
20 + 21 + 22 +„+ 2k
数据结构树与二叉树常用计算公式
数据结构树与⼆叉树常⽤计算公式在⼆叉树的理论推导以及⼀些⾼频类型题中,我们经常需要计算⼆叉树的总结点数,某⼀层的结点数以及已知结点数反推树的⾼度,本⽂围绕这⼏个⾼频知识点,归纳总结以下公式。
公式(1)⾮空⼆叉树叶⼦结点数 = 度为2的结点数 + 1 即,N0=N2+1(2)⾮空⼆叉树上第K层⾄多有2k−1个结点(K≥1)(3)⾼度为H的⼆叉树⾄多有2H−1 个结点(H≥1)(4)具有N个(N>0)结点的完全⼆叉树的⾼度为⌈log2(N+1)⌉或⌊log2N⌋+1(5)对完全⼆叉树按从上到下、从左到右的顺序依次编号1,2,...,N,则有以下关系:①当i>1 时,结点i的双亲结点编号为⌊i/2⌋,即当i为偶数时,其双亲结点的编号为i/2 ,它是双亲结点的左孩⼦;当i为奇数时,其双亲结点的编号为 (i−1)/2 ,它是双亲结点的右孩⼦。
②当 2i≤N时,结点i的左孩⼦编号为 2i,否则⽆左孩⼦。
③当 2i+1≤N时,结点i的右孩⼦编号为 2i+1 ,否则⽆右孩⼦。
④结点i所在层次(深度)为⌊log2i⌋+1 。
(设根结点为第1层)经典例题**408考研-2011-4** 若⼀棵完全⼆叉树有768个结点,则⼆叉树中叶结点的个数是_____。
A.257B.258C.384D.385解法1根据完全⼆叉树的性质,最后⼀个分⽀结点的序号为⌊n/2⌋=⌊768/2⌋=384 ,故叶⼦结点的个数为 768−384=384解法2由⼆叉树的性质N=N0+N1+N2和N0=N2+1 可知N=2N0−1+N1,2N0−1+N1=768显然,N1=1,2N0=768,则N0=384解法3完全⼆叉树的叶⼦结点只可能出现在最下两层,由题可计算完全⼆叉树的⾼度为10。
第10层的叶⼦结点数为 768−(29−1)=257第10层的叶⼦结点在第9层共有⌈257/2⌉=129 个⽗节点第9层的叶⼦结点数为 (29−1)−129=127则叶⼦结点总数为 257+127=384Processing math: 100%。
数据结构与算法第5章课后答案
page: 1The Home of jetmambo - 第 5 章树和二叉树第 5 章树和二叉树(1970-01-01) -第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n≥0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m (m>0)个()的集合,每个集合都是根结点的子树。
【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。
【解答】度,孩子,双亲⑶一棵二叉树的第i(i≥1)层最多有()个结点;一棵有n(n>0)个结点的满二叉树共有()个叶子结点和()个非终端结点。
【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。
⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。
【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。
⑸深度为k的二叉树中,所含叶子的个数最多为()。
【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。
⑹具有100个结点的完全二叉树的叶子结点数为()。
【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。
⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。
则该树中有()个叶子结点。
【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。
⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。
数据结构5树资料
3.树的术语:
结点(node)
数据元素。
结点的度(degree)
结点的子树个数。
树中所有结点度的最大值。 度不为0的结点。 度为0的结点。 某结点子树的根结点。
树的度(degree) 分支(branch)结点
叶(leaf)结点 孩子(child)结点
2018/10/13 第5章 树和二叉树
同构型
19/112
A
异构型
B
C
D
E
F
G
H
I
J
孩子表示法-- c语言描述 (同构型)
typedef struct TreeNode
{ DataType data;
struct TreeNdoe *Son[MAXSON];
} nodetype;
2018/10/13 第5章 树和二叉树 20/112
a b d i e j f c g h
2018/10/13
第5章 树和二叉树
2/112
除根以外的其它结点划分为m (m 0)个互不相交 的有限集合T0, T1, …, Tm-1,每个集合又是一棵树, 并且称之为根的子树(SubTree)。
每棵子树的根结点有且仅有一个直接前驱,但可 以有0个或多个直接后继。
B E F C G H D I J
E,F,B,G,C,H,I,J, D,A
第5章 树和二叉树 26/112
2018/10/13
3.层序遍历
按层次顺序(1,2,…)遍历,同一层按从左 到右的顺序。
A B E F C G H D I J
遍历序列: A,B,C,D,E,F,G,H,I,J
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⑸ 深度为 k 的二叉树中,所含叶子的个数最多为( )。 【解答】2k-1 【分析】在满二叉树中叶子结点的个数达到最多。
⑷ 线索二叉树中某结点 R 没有左孩子的充要条件是( )。 A R.lchild=NULL B R.ltag=0 C R.ltag=1 D R.rchild=NULL 【解答】C 【分析】线索二叉树中某结点是否有左孩子,不能通过左指针域是否为空来判断,而要判断左标志是否为1。 ⑸ 深度为 k 的完全二叉树至少有( )个结点,至多有( )个结点,具有 n 个结点的完全二叉树按层序从 1 开始编号,则编号最小的叶子的序号是( )。 A 2k-2+1 B 2k-1 C 2k -1 D 2k–1 -1 E 2k+1 F 2k+1 -1 G 2k -1+1 H 2k 【解答】B,C,A 【分析】深度为 k 的完全二叉树最少结点数的情况应是第 k 层上只有 1 个结点,最多的情况是满二叉树, 编号最小的叶子应该是在结点数最少的情况下,叶子结点的编号。
⑶ 设计算法求二叉树的深度。 【解答】当二叉树为空时,深度为 0;若二叉树不为空,深度应是其左右子树深度的最大值加 1,而其左右 子树深度的求解又可通过递归调用本算法来完成。具体算法如下:
⑷ 编写算法,要求输出二叉树后序遍历序列的逆序。 【解答】要想得到后序的逆序,只要按照后序遍历相反的顺序即可,即先访问根结点,再遍历根结点的右 子树,最后遍历根结点的左子树。注意和前序遍历的区别,具体算法如下: ⑸ 以二叉链表为存储结构,编写算法求二叉树中结点 x 的双亲。 【解答】对二叉链表进行遍历,在遍历的过程中查找结点 x 并记载其双亲。具体算法如下:
⑻ 编写算法交换二叉树中所有结点的左右子树。 【解答】对二叉树进行后序遍历,在遍历过程中访问某结点时交换该结点的左右子树。 具体算法如下:
⑼ 以孩子兄弟表示法做存储结构,求树中结点 x 的第 i 个孩子。 【解答】先在链表中进行遍历,在遍历过程中查找值等于 x 的结点,然后由此结点的最左孩子域 firstchild 找到值为 x 结点的第一个孩子,再沿右兄弟域 rightsib 找到值为 x 结点的第 i 个孩子并返回指向这个孩子的 指针。 树的孩子兄弟表示法中的结点结构定义如下: template struct TNode { T data; TNode *firstchild, *rightsib; }; 具体算法如下:
10.算法设计
⑴ 设计算法求二叉树的结点个数。 【解答】本算法不是要打印每个结点的值,而是求出结点的个数。所以可将遍历算法中的“访问”操作改为“计 数操作”,将结点的数目累加到一个全局变量中,每个结点累加一次即完成了结点个数的求解。 具体算法如下:
⑵ 设计算法按前序次序打印二叉树中的叶子结点。 【解答】本算法的要求与前序遍历算法既有相同之处,又有不同之处。相同之处是打印次序均为前序,不 同之处是此处不是打印每个结点的值,而是打印出其中的叶子结点,即为有条件打印。为此,将前序遍历 算法中的访问操作改为条件打印即可。算法如下:
第 5 章 树和二叉树
课后习题讲解
1. 填空题 ⑴ 树是 n(n≥0)结点的有限集合,在一棵非空树中,有( )个根结点,其余的结点分成 m(m>0)个 ( )的集合,每个集合都是根结点的子树。 【解答】有且仅有一个,互不相交
⑵ 树中某结点的子树的个数称为该结点的( ),子树的根结点称为该结点的( ),该结点称为其子树根 结点的( )。 【解答】度,孩子,双亲
⑵ 在二叉树的前序遍历序列中,任意一个结点均处在其子女的前面。 【解答】对。由前序遍历的操作定错。二叉树和树是两种不同的树结构,例如,左斜树是一棵二叉树,但它的度为 1。
⑷ 由树转换成二叉树,其根结点的右子树总是空的。 【解答】对。因为根结点无兄弟结点。
A n-1 B n C 【解答】D
+1 D 不能确定
【分析】此题并没有指明是完全二叉树,则其深度最多是 n,最少是
+1。
⑶ 二叉树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。 A 空或只有一个结点 B 高度等于其结点数 C 任一结点无左孩子 D 任一结点无右孩子 【解答】B 【分析】此题注意是序列正好相反,则左斜树和右斜树均满足条件。
⑹ 具有 100 个结点的完全二叉树的叶子结点数为( )。 【解答】50 【分析】100 个结点的完全二叉树中最后一个结点的编号为 100,其双亲即最后一个分支结点的编号为 50, 也就是说,从编号 51 开始均为叶子。
⑺ 已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2 的结点,4 个度为 3 的结点。则该树中有( ) 个叶子结点。 【解答】12 【分析】根据二叉树性质 3 的证明过程,有 n0=n2+2n3+1(n0、n2、n3 分别为叶子结点、度为 2 的结点 和度为 3 的结点的个数)。
⑹ 一个高度为 h 的满二叉树共有 n 个结点,其中有 m 个叶子结点,则有( )成立。 A n=h+m B h+m=2n C m=h-1 D n=2m-1 【解答】D 【分析】满二叉树中没有度为 1 的结点,所以有 m 个叶子结点,则度为 2 的结点个数为 m-1。
⑺ 任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序( )。
5.证明:已知一棵二叉树的前序序列和中序序列,则可唯一确定该二叉树。 【解答】证明采用归纳法。 设二叉树的前序遍历序列为 a1a2a3… an,中序遍历序列为 b1b2b3… bn。 当 n=1 时,前序遍历序列为 a1,中序遍历序列为 b1,二叉树只有一个根结点,所以,a1= b1,可以唯一 确定该二叉树; 假设当 n<=k 时,前序遍历序列 a1a2a3… ak 和中序遍历序列 b1b2b3… bk 可唯一确定该二叉树,下面证 明当 n=k+1 时,前序遍历序列 a1a2a3… akak+1 和中序遍历序列 b1b2b3… bk bk+1 可唯一确定一棵二叉 树。 在前序遍历序列中第一个访问的一定是根结点,即二叉树的根结点是 a1,在中序遍历序列中查找值为 a1 的结点,假设为 bi,则 a1=bi 且 b1b2… bi-1 是对根结点 a1 的左子树进行中序遍历的结果,前序遍历序列 a2a3… ai 是对根结点 a1 的左子树进行前序遍历的结果,由归纳假设,前序遍历序列 a2a3… ai 和中序遍历 序列 b1b2… bi-1 唯一确定了根结点的左子树,同样可证前序遍历序列 ai+1ai+2… ak+1 和中序遍历序列 bi+1bi+2… bk+1 唯一确定了根结点的右子树。
⑶ 一棵二叉树的第 i(i≥1)层最多有( )个结点;一棵有 n(n>0)个结点的满二叉树共有( )个叶子 结点和( )个非终端结点。 【解答】2i-1,(n+1)/2,(n-1)/2 【分析】设满二叉树中叶子结点的个数为 n0,度为 2 的结点个数为 n2,由于满二叉树中不存在度为 1 的 结点,所以 n=n0+n2;由二叉树的性质 n0=n2+1,得 n0=(n+1)/2,n2=(n-1)/2。
⑻ 某二叉树的前序遍历序列是 ABCDEFG,中序遍历序列是 CBDAFGE,则其后序遍历序列是( )。 【解答】CDBGFEA 【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。
⑼ 在具有 n 个结点的二叉链表中,共有( )个指针域,其中( )个指针域用于指向其左右孩子,剩下的 ( )个指针域则是空的。 【解答】2n,n-1,n+1
8.对给定的一组权值 W=(5,2,9,11,8,3,7),试构造相应的哈夫曼树,并计算它的带权路径长 度。 【解答】构造的哈夫曼树如图 5-13 所示。
树的带权路径长度为: WPL=2×4+3×4+5×3+7×3+8×3+9×2+11×2 =120 9.已知某字符串 S 中共有 8 种字符,各种字符分别出现 2 次、1 次、4 次、5 次、7 次、3 次、4 次和 9 次 , 对该字符串用[0,1]进行前缀编码,问该字符串的编码至少有多少位。 【解答】以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如图 5-14 所示。其带权路径长度 =2×5+1×5+3×4+5×3+9×2+4×3+4×3+7×2=98,所以,该字符串的编码长度至少为 98 位。
A 肯定不发生改变 B 肯定发生改变 C 不能确定 D 有时发生变化 【解答】A 【分析】三种遍历次序均是先左子树后右子树。
⑻ 如果 T' 是由有序树 T 转换而来的二叉树,那么 T 中结点的前序序列就是 T' 中结点的( )序列,T 中 结点的后序序列就是 T' 中结点的( )序列。 A 前序 B 中序 C 后序 D 层序 【解答】A,B
⑸ 用一维数组存储二叉树时,总是以前序遍历存储结点。 【解答】错。二叉树的顺序存储结构是按层序存储的,一般适合存储完全二叉树。
4.证明:对任一满二叉树,其分枝数 B=2(n0-1) 。(其中,n0 为终端结点数)
【解答】因为在满二叉树中没有度为 1 的结点,所以有: n=n0+n2
设 B 为树中分枝数,则 n=B+1 所以 B=n0 +n2-1 再由二叉树性质: n0=n2+1 代入上式有: B=n0+n0-1-1=2(n0-1)
(10) 在有 n 个叶子的哈夫曼树中,叶子结点总数为( ),分支结点总数为( )。 【解答】n,n-1 【分析】n-1 个分支结点是经过 n-1 次合并后得到的。