数据结构__第四章树习题课概论

合集下载

数据结构与算法 习题解答 第4章

数据结构与算法 习题解答 第4章

第 4 章 树结构1.选择题(1)C (2)C (3)B (4)B (5)B (6)C (7)C (8)D (9)A (10)D (11)D (12)B (13)B (14)D (15)B2.判断题(1)√(2)√ (3)Ⅹ (4)Ⅹ(5)√ (6)Ⅹ(7)√ (8)√(9)√(10)Ⅹ (11)Ⅹ(12)Ⅹ(13)√(14)Ⅹ(15)Ⅹ(16)Ⅹ(17)√(18)Ⅹ(19)Ⅹ(20)√3.简答题(1)一棵度为 2 的树与一棵二叉树有何区别?树与二叉树之间有何区别?【解答】①二叉树是有序树,度为 2 的树是无序树,二叉树的度不一定是 2。

②二叉树是有序树,每个结点最多有两棵子树,树是无序树,且每个结点可以有多棵子树。

A(2)对于图 4-37 所示二叉树,试给出: 1)它的顺序存储结构示意图;BC2)它的二叉链表存储结构示意图; 3)它的三叉链表存储结构示意图。

DEF【解答】 1)顺序存储结构示意图:AB CDEF ^ ^ ^ G^ ^ HGH(图 4-37)2)二叉链表存储结构示意图:3)三叉链表存储结构示意图:ABC^^D^E^ ^ F^G^^H^A^BC^^ D^E^^F^ G^^ H^(3)对于图 4-38 所示的树,试给出: 1)双亲数组表示法示意图; 2)孩子链表表示法示意图; 3)孩子兄弟链表表示法示意图。

ABCGFEDIHJKMN(图 4-38)【解答】 1)双亲数组表示法示意图:2)孩子链表表示法示意图:0 A -1 1 B0 2 C0 3 D2 4 E2 5F1 6 G1 7 H5 8I 2 9J 4 10 K 4 11 M 3 12 N 83)孩子兄弟链表表示法示意图:0A 1B 2C 3D 4E 5F 6G 7H 8I 9J 10 K 11 M 12 N12^56^348^11 ^ 910 ^7^12 ^ABC^^GFEDI^^ H^^J^ K^ ^ M^ ^ N^(4)画出图 4-39 所示的森林经转换后所对应的二叉树,并指出森林中满足什么条件的 结点在二叉树中是叶子。

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

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

第四章一、简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。

答:●空串是指不包含任何字符的串,它的长度为零。

空白串是指包含一个或多个空格的串,空格也是字符。

●串常量是指在程序中只可引用但不可改变其值的串。

串变量是可以在运行中改变其值的。

●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。

●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。

动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。

●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。

●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。

二、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。

计算机存储和组织数据方式之《数据结构》关于“树”的习题(PPT内含答案)

计算机存储和组织数据方式之《数据结构》关于“树”的习题(PPT内含答案)

• 12.已知二叉树的先序遍历和后序遍历不能唯一确定这棵 二叉树,这是因为不知道根结点是哪一个。

(T )
• 7.树结构中的每个结点最多只有一个直接前驱。 (T )
• 8.完全二叉树一定是满二叉树。 (F)
• 9.由树转换成二叉树,其根结点的右子树一定为空。 (T )
• 10.在先序遍历二叉树的序列中,任何结点的子树的所有 结点都是直接跟在该结点之后。( F )
• 11.一棵二叉树中序遍历序列的最后一个结点,发家是该 二叉树先序遍历的最后一个结点。 ( T )
B.CBDGFEA D.CBEGFDA
• 8.某二又树的后序遍历序列为DABEC,中序遍历序列为
DEBAC,则先序遍历序列为( D )。
• A.ACBED C.DEABC
B.DECAB D.CEDBA
• 9.在完全二叉树中,如果一个结点是叶子结点,则它没 有( C )。
• A.左孩子结点
B.右孩子结点
• 5.对于二叉树来说,第i层上最多有___2i-1______个结点。 • 6.由三个结点构成的二叉树,共有____5_____种不同的
结构。
• 7.由一棵二叉树的先序序列和___中序____序列可唯一 确定这棵二叉树。
习题6
• 9.先序序列和中序序列相同的二叉树为单右枝二叉树或 孤立结点。
• 10.设一棵二叉树共有50个叶子结点(终端结点),则有 ______49______度为2的结点。
• A. 5
B. 6
• C. 7
D. 8
• 6.二叉树的先序遍历序列为ABC的不同二叉树有( C ) 种形态。
• A. 3
B. 4
• C. 5
D.6
习题6

数据结构第4单元课后练习答案

数据结构第4单元课后练习答案
第四单元 树形结构
对于三个结点A,B和C,可分别组成多少 不同的无序树、有序树和二叉树?
答:(1)无序树:9棵 (2)有序树:12棵 (3)二叉树:30棵
高度为h的k叉树的特点是:第h层的节点度为 0,其余结点的度均为k。如果按从上到下, 从左到右的次序从1开始编号,则: ①各层的结点是多少? ②编号为i的结点的双亲的编号是多少? ③编号为i的结点的第m个孩子的编号是多少? ④编号为i的结点的有右兄弟的条件是什么?
写出下面得二叉树的遍历结果。
先序:ADEHFJGBCK 中序:HEJFGDABKC 后序:HJGFEDKCBA
设计算法,交换一棵二叉树中每个结点 的左、右子树。
template <class T> void BTree<T>::Exch(BTNode<T> *p){ if (p){ BTNode<T> *q=Exch(p->lchild); p->lchild=Exch(p->rchild); p->rchild=q; } }
试证明在哈夫曼算法的实施过程中,二叉树森林中的每 一棵子树都是Huffman树。
证明: 在Huffman算法进行的每一步,都会有一棵新的二叉树产生,它是合并 原来森林中根结点权值最小的两棵子树而得来的。假设此二叉树为T。 取T的根为一棵独立的子树,则它是一棵Huffman树,将此结点向下分 解,仍然得到一棵Huffman树。 此后,按照与T的形成过程相反的顺序依次分解各叶结点。由于在每次 分解时,新产生的两个叶结点在Huffman算法过程中,都是待合并子树根 结点中权值最小的,也就必然在本二叉树中是权值最小的两个叶结点。 根据前面的定理可知,T是一棵Huffman树。

数据结构第四章的习题答案

数据结构第四章的习题答案

数据结构第四章的习题答案数据结构第四章的习题答案在学习数据结构的过程中,习题是非常重要的一环。

通过解答习题,我们可以更好地理解和应用所学的知识。

在第四章中,我们学习了树和二叉树的相关概念和操作。

下面我将为大家提供一些第四章习题的答案,希望能帮助大家更好地掌握这一章节的内容。

1. 请给出树和二叉树的定义。

树是由n(n>=0)个结点构成的有限集合,其中有且仅有一个特定的结点称为根结点,其余的结点可以分为若干个互不相交的有限集合,每个集合本身又是一个树,称为根的子树。

二叉树是一种特殊的树结构,其中每个结点最多有两个子结点,分别称为左子结点和右子结点。

二叉树具有递归的定义,即每个结点的左子树和右子树都是二叉树。

2. 请给出树和二叉树的遍历方式。

树的遍历方式包括前序遍历、中序遍历和后序遍历。

前序遍历是先访问根结点,然后依次遍历左子树和右子树。

中序遍历是先遍历左子树,然后访问根结点,最后遍历右子树。

后序遍历是先遍历左子树和右子树,最后访问根结点。

二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。

前序遍历是先访问根结点,然后依次遍历左子树和右子树。

中序遍历是先遍历左子树,然后访问根结点,最后遍历右子树。

后序遍历是先遍历左子树和右子树,最后访问根结点。

3. 给定一个二叉树的前序遍历序列和中序遍历序列,请构建该二叉树。

这个问题可以通过递归的方式解决。

首先,根据前序遍历序列的第一个结点确定根结点。

然后,在中序遍历序列中找到根结点的位置,该位置左边的结点为左子树的中序遍历序列,右边的结点为右子树的中序遍历序列。

接下来,分别对左子树和右子树进行递归构建。

4. 给定一个二叉树的中序遍历序列和后序遍历序列,请构建该二叉树。

和前面的问题类似,这个问题也可以通过递归的方式解决。

首先,根据后序遍历序列的最后一个结点确定根结点。

然后,在中序遍历序列中找到根结点的位置,该位置左边的结点为左子树的中序遍历序列,右边的结点为右子树的中序遍历序列。

数据结构与算法教程 习题答案 作者 朱明方 吴及 第4章习题解答.docx

数据结构与算法教程 习题答案 作者 朱明方 吴及 第4章习题解答.docx

第4章习题解答4. 1如图4-51所示的树中,找出树中度最大的结点, 说明度的值?找出树中度最小的结点,其度是多少?该树的度是多少?它的深度是多少?[解答]该树中,度最大的结点分别是包含元素A和C的结点,它们的度图 4-51都为3,它也就是该树的度。

树中的叶子结点是度最小的结点,它们分别是包含元素E, F, G, H, I, J的结点,它们的度都为0。

该树深度为3o4.2 一棵共有n个结点的树,其所有分支结点的度都为k,请求出该树的叶子结点数。

[解答]设树中的分支结点数为队,叶子结点数n°,则有:n=n k+n0 , ①设分支数为B,因为除了根结点以外每个结点都有一个分支指向,因此有:B=n-1, ②另一方面,所有分支都由分支结点发出,则有:B=n k*k , ③比较②、③式有:n k*k =n-l, 即:n k=-!!—!-, ④k将④代入①,可得:n°=n-。

k所以该树的叶子结点数为:n-。

k4.3已知一棵度为m的树中,有m个度为1的结点,有址个度为2的结点,…,有 &个度为m的结点,请计算该树中的叶子结点数。

[解答]设该树共有n个结点,叶子结点数为m,则有:n= no + ni + n2+ …+ n…①另一方面,树中除了根结点以外每个结点都有一个指针指向,也就是说总指针数与总结点数之间相差1;而树中的指针都是由非叶子结点发出的,由此可以得到:n= 1+ ni + 2*m + 3*m + ,,, +m*n“,②比较式①、②有:m = 1 + m + 2m +=1+ £(「1)勺i=24.4假设以孩子表示法用定长结点表示一棵有n个结点,度为k的树,请计算出树中的空指针数目。

[解答]因为树的度为k, n个定长结点共有nk个指针域;除根结点外,每个结点有…个指针指向,即,树中共有n-1个指针。

所以,空指针域个数为:nk-(n-l)=n(k-l)+l (个)。

4.5树与二叉树有何异同?度为2的有序树与二叉树有何区别?[解答]树与二又树都具有明显的层次结构,都是表示•对多的联系。

数据结构第4单元课后练习答案

数据结构第4单元课后练习答案
第四单元 树形结构
对于三个结点A,B和C,可分别组成多少 不同的无序树、有序树和二叉树?
答:(1)无序树:9棵 (2)有序树:12棵 (3)二叉树:30棵
高度为h的k叉树的特点是:第h层的节点度为 0,其余结点的度均为k。如果按从上到下, 从左到右的次序从1开始编号,则: ①各层的结点是多少? ②编号为i的结点的双亲的编号是多少? ③编号为i的结点的第m个孩子的编号是多少? ④编号为i的结点的有右兄弟的条件是什么?
试证明在哈夫曼算法的实施过程中,二叉树森林中的每 一棵子树都是Huffman树。
证明: 在Huffman算法进行的每一步,都会有一棵新的二叉树产生,它是合并 原来森林中根结点权值最小的两棵子树而得来的。假设此二叉树为T。 取T的根为一棵独立的子树,则它是一棵Huffman树,将此结点向下分 解,仍然得到一棵Huffman树。 此后,按照与T的形成过程相反的顺序依次分解各叶结点。由于在每次 分解时,新产生的两个叶结点在Huffman算法过程中,都是待合并子树根 结点中权值最小的,也就必然在本二叉树中是权值最小的两个叶结点。 根据前面的定理可知,T是一棵Huffman树。
试证明哈夫曼算法的正确性。
定理 分裂一棵Huffman树的某个叶结点,如果产生的两个叶结点的权值 在所有叶结点权值中最小,则将生成一棵新的Huffman树。 证明: 假设二叉树T是字母表C上的一棵Huffman树,z是它的一个叶节点。在 z的下面添加两个子结点x和y,它们的权值分别是f(x)和f(y),且满足 f(z)=f(x)+f(y), f(x)和f(y)在字母表C' =C-{z}+{x,y}上的权值最小,可设新 产生的二叉树为T'。 在字母表C'上存在一棵最优二叉树T",在T"上x和y互为兄弟结点。在 T"中删除结点x和y,将字母z以及权值f(z)=f(x)+f(y)赋予x和y在T"中的父 结点,得到一棵在字母表C上的二叉树Ť。 根据引理三,可知Ť是字母表C上的最优二叉树,由于T也是字母表C上 的最优二叉树,所以WPL(Ť)= WPL(T)。 由于WPL(Ť)= WPL(T")-f(x)-f(y), WPL(T)= WPL(T')-f(x)-f(y),所以 WPL(T")=WPL(T'),即,T'是字母表C'上的最优二叉树。证毕。 补充说明:利用Huffman算法构造一棵二叉树T后,单独取出根结点和它 的两个子结点,则该子树必是一棵最优二叉树。以后,按照与T的形成过 程的相反的顺序依次分解各叶结点,直到再次构造出T,则依据上面的定 理可知T是一棵Huffman树。

2016数据结构课件-第四章_树

2016数据结构课件-第四章_树
2.叶结点、分支结点
度为0的结点被称为叶结点;度 0的结点被称为 分支结点。
在图4.1中: B有一个子结点E,度为1;A有三个 子结点B、C和D(换言之,A是B、C和D的父结 点),度为3,这棵树的度也为3 .
3.结点的层数 树形T中结点的层数递归定义如下: ⑴ root(T)层数为零; ⑵ 其余结点的层数为其前驱结点的层数加1 .
证毕。
*** 二叉树顺序存储
要存储一棵二叉树,必须存储其所有结点 的数据信息、左孩子和右孩子地址,既可 用顺序结构存储,也可用链接结构存储。
二叉树的顺序存储是指将二叉树中所有结 点按层次顺序存放在一块地址连续的存储 空间中,同时反映出二叉树中结点间的逻 辑关系。
*** 二叉树顺序存储
对于完全二叉树,结点的层次顺序反映了其结构, 可按层次顺序给出一棵完全二叉树之结点的编号,事 实上,这就是完全二叉树的顺序存储方法,结点编号 恰好反映了结点间的逻辑关系。只要对二叉树之结点 按照层次顺序进行编号,就可利用一维数组A来存储 一棵含有n个结点的完全二叉树,其中A[1]存储二叉 树的根结点,A[i]存储二叉树中编号为i的结点,并且 结点A[i]的左孩子(若存在)存放在A[2i]处,而A[i]的 右孩子(若存在)存放在A[2i1]处。
从根结点到某个结点的路径长度恰为该结点的层数。
5. 子孙结点、祖先结点 一棵树中若存在结点vm到vn的路径,则称vn为vm的子孙结 点,vm为vn的祖先结点。
不难看出,一个结点到它的某个子孙结点有且仅有一 条路径。树中结点之间的父子关系具有如下特征:
(1)树中任一结点都可以有零个或多个直接后继(即 子结点),但至多只能有一个直接前驱(即父结点)。
图4.1为一棵由根结点A出发的树,其中,A有三 个子结点B、C和D(换句话说,A是B、C和D的父结 点);B有一个子结点E;E有一个子结点F;C有两个 子结点G和H;D有一个子结点I; F,G,H,I是叶子 结点,因为它们没有子结点。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
(8)在Huffman树中,若编码长度只允许小于等于4,则除了已
对两个字符编码为0和10外,还可最大对 4 个字符编码。
(9)设高度为h(h≥1)的二叉树中,若设二叉树只有度为0和
度为2的结点,则二叉树中所含结点个数至少 2h-1 个。
(10)设森林F中有4棵树,第1,2,3,4棵树的结点个数分别 为n1,n2,n3,n4,当把该森林F转换成一棵二叉树后,其根结点的
if(!t->leftChild && !t->rightChild) return 1;
return Degrees0(t->leftChild)+Degrees0(t->rightChild); }或 void Degrees0(BinTreeNode *t,&count) {
if (t) {
if(!t->leftChild && !t->rightChild) count++;
2、如一棵树有n1个度为1的结点,有n2个度为2的 结点,……, nm个度为m的结点,试问有多少个度 为0的结点?
解:n=n0+n1+n2+…+nm n-1=n1+2*n2+…+mnm 化简:n=1+n2+2n3+…+(m-1)nm
m
=1+ (i 1)ni i2
12
3、试分别找出满足下列条件的所有二叉树: (1)二叉树的前序遍历与中序遍历相同; (2)二叉树的中序遍历与后序遍历相同; (3)二叉树的前序遍历与后序遍历相同;
5
一、填空题
(4)在一棵二叉树中,若度为2的结点数有5个,度为1 的结点数
有6个,那么度为0的结点数有 6 个?
(5)在一棵三叉树中,若度为3的结点数有2个,度为2的结点数
有1个,度为1 的结点数有2个,那么度为0的结点数有 6 个? (4) n=n0+n1+n2=n0+5+6=e+1=2*5+1*6+1 => n0=6 (5) n=n0+n1+n2+n3=n0+2+1+2=e+1=3*2+2*1+1*2+1
}
3
4-14.将图4.25中的树转换成二叉树。然后对树和转 换成的二叉树分别进行适当的遍历,并加以对比。
A
B
C
D
E
F
G
H
I
J
K
L
M
图4.25 树
4
一、填空题
(1)对于一棵具有n个结点的树,该树中所有结点度数之和为 n-1 。
(2) k叉树上的i层最大有 ki-1 个结点。
(3) 高度为h的k叉树最多有
第四章 树与二叉树 习题课
1
作业:p125 4-1 (省略) 4-3 有m个叶子的二叉树最少有多少个结点? 4-4 现有按后序遍历二叉树的结果为C,B,A,有
几种不同的二叉树可得到这一结果?
A
B C
2
4-10 设计一个算法,将一个用二叉链表存储的二 叉树的每个结点的左、右子女位置交换。
void Change (BinTreeNode *t) { if (!t) return 0; if(t->leftChild||t->rightChild) { p= t->leftChild; t->leftChild= t->rightChild; t->rightChild=p; }
a1 (qh 1) 1 (k h 1) k h 1
q1
k1 k1
个结点。
n个结点的k叉树的最小高度为
log n(k 1)1 k

假定一棵三叉树的结点个数为50,则它的最小高度为 log1301 最大高度为 50 。
一棵高度为5的满二叉树中的结点数为 25-1 。 一棵高度为3的满四叉树中的结点数为 (43-1)/3 。
9
二、对二叉树递归算法的理解
void Preorder(BinTree *r) { void Preorder(BinTree *r) {
// 前序遍历的递归算法
// 消去前序遍历第二个递归调用
if(r) {
while(r) {
cout<<r->data;
cout<<r->data;
② Preorder(r->leftChild);
while(p) { cout <<p->data; s.Push(p); p=p->leftChild; }
if(!s.IsEmpty()){ p=s.Pop();p=p->rightChild;
}//if }//while }// lnOrderTraverse
11
1、3个结点的树和二叉树个共有多少不同形态? 树有2种,二叉树有5种。
Preorder(r->leftChild);
① Preorder(r->rightChild);
r=r->rightChild;
}
A
E
10
非递归的前序遍历算法:
void PreOrderTraverse(BinaryTreeNode *r){ Stack s; s.InitStack();p=r; while(p || !s.IsEmpty()){
=> n0=6
6
(6)若对一棵二叉树从0开始进行结点编号, 并按此编号把它顺序
存储到一维数组a中,则a[i]元素的左子女结点编号为 2i+1 , i 1
右子女结点编号为 2i+2 ,双亲结点编号为 2 。
(7)对于一棵具有n个结点的二叉树的二叉链表中,指针总数为
为 2n ,其中 n-1 个指针指向子女结点, n+1 指针空闲。
(1) 空二叉树或左子树为空的二叉树。 (2) 空二叉树或右子树为空的二叉树。 (3) 空二叉树或只有根结点的二叉树。
13
四、设二叉树以二叉链表表示,试编写有关二叉树的递归算法。 1. 统计二叉树中叶结点的个数。
int Degrees0(BinTreeNode *t) {
if (!t) return 0;
左子树有 n1 个结点,右子树有 n2+n3+n4 个结点。
8
二、判断题
(11) 二叉树是树的特殊情形。 × (12) 若有一个结点是二叉树中某个子树的中序遍历结 果序列的最后一个结点,则它一定是该子树的前序遍 历结果序列的最后一个结点。 × (13) 若有一个叶结点是二叉树中某个子树的中序遍历 结果序列的最后一个结点,则它一定是该子树的前序 遍历结果序列的最后一个结点。× (14) 若有一个叶结点是二叉树中某个子树的前序遍历 结果序列的最后一个结点,则它一定是该子树的中序 遍历结果序列的最后一个结点。 ×
相关文档
最新文档