数据结构课后习题Word下载.docx
- 文档编号:15218481
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:14
- 大小:137.21KB
数据结构课后习题Word下载.docx
《数据结构课后习题Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课后习题Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
14•分别写函数完成:
在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。
在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。
15•分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。
16•编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。
17•对以孩子-兄弟链表表示的树编写计算树的深度的算法。
18•已知二叉树按照二叉链表方式存储,利用栈的基本操作写出后序遍历非递归的算法。
19.设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。
正则二叉树是指:
在二叉树中不存在子树个数为1的结点。
20.计算二叉树最大宽度的算法。
二叉树的最大宽度是指:
二叉树所有层中结点个数的最大值。
21.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。
22.证明:
给定一棵二叉树的前序序列与中序序列,可唯一确定这棵二叉树;
给定一棵二叉树的后序序列与中序序列,可唯一确定这棵二叉树;
23.二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。
24.二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换。
实习题
1.[问题描述]建立一棵用二叉链表方式存储的二叉树,并对其进行遍历<先序、中序和后序),打印输出遍历结果。
[基本要求]从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树<以先序来建立)
并对其进行遍历<先序、中序、后序),然后将遍历结果打印输出。
要求采用递归和非递归两种方法实现。
个人资料整^__仅限学习使用
[测试数据]ABC巾巾DE巾G巾巾F巾巾巾<其中巾表示空格字符)
输出结果为:
先序:
ABCDEGF
中序:
CBEGDFA
后序:
CGBFDBA
2•已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示<竖向显示就是二
叉树的按层显示)。
3•如题1要求建立好二叉树,按凹入表形式打印二叉树结构,如下图所示。
2.按凹入表形式打印树形结构,如下图所示
第六章答案
6.1分别画出具有3个结点的树和3个结点的二叉树的所有不同形态
6.3已知一棵度为k的树中有ni个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点?
【解答】设树中结点总数为n,则n=n0+ni++nk
树中分支数目为B,贝UB=ni+2n2+3n3+……+knk
因为除根结点外,每个结点均对应一个进入它的分支,所以有n=B+1
即no+ni++nk=ni+2n2+3n3++knk+1
由上式可得叶子结点数为:
no=n2+2n3++(k-i>nk+i
6.5已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个?
【解答】no表示叶子结点数,n2表示度为2的结点数,则no=n2+i
所以n2=no-i=49,当二叉树中没有度为i的结点时,总结点数n=no+n2=99
6.6试分别找出满足以下条件的所有二叉树:
(i>前序序列与中序序列相同。
(2>中序序列与后序序列相同。
(3>前序序列与后序序列相同。
【解答】
(i>前序与中序相同:
空树或缺左子树的单支树;
(2>中序与后序相同:
空树或缺右子树的单支树;
(3>前序与后序相同:
空树或只有根结点的二叉树。
6.9假设通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:
0.07,o.i9,0.02,0.06,0.32,0.03,0.2i,0.i0
构造哈夫曼树如下:
0.32
Q19
0.^1
Ir
011
n.7
□
0.05
Q.0
0.07
哈夫曼编码为:
11111
I5:
1100
12:
11110
3:
1110
4:
1101
6.11画出如下图所示树对应的二叉树
I6:
10
I7:
01
I8:
00
9)
6.15分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继。
在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。
在后序线索二叉树T中,查找
给定结点*p在后序序列中的前驱。
<
1)找结点的中序前驱结点
BiTNode*lnPre(BiTNode*p>
/*在中序线索二叉树中查找p的中序前驱结点,并用pre指针返回结果*/
{if(p->
Ltag==1>
pre=p->
LChild。
/*直接利用线索*/
else
{/*在p的左子树中查找“最右下端”结点*/
for(q=p->
q->
Rtag==0。
q=q->
RChild>
。
pre=q。
}
return(pre>
2)找结点的中序后继结点
BiTNode*InSucc(BiTNode*p>
/*在中序线索二叉树中查找p的中序后继结点,并用succ指针返回结果*/
Rtag==1>
succ=p->
RChild。
{/*在p的右子树中查找“最左下端”结点*/
q->
Ltag==0。
q=q->
LChild>
。
succ=q。
return(succ>
(3>
找结点的先序后继结点
BiTNode*PreSucc(BiTNode*p>
/*在先序线索二叉树中查找p的先序后继结点,并用succ指针返回结果*/
Ltag==0>
elsesucc=p->
(4>
找结点的后序前驱结点
BiTNode*SuccPre(BiTNode*p>
/*在后序线索二叉树中查找p的后序前驱结点,并用pre指针返回结果*/
elsepre=p->
}6.21已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法
VoidPreOrder(BiTreeroot>
/*先序遍历二叉树的非递归算法*/
{
InitStack(&
S>
p=root。
while(p!
=NULL||!
lsEmpty(S>
>
{if(p!
=NULL>
Visit(p->
data>
push(&
S,p>
p=p->
Lchild。
Pop(&
S,&
p>
6.24已知二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换
算法(一>
Voidexchange(BiTreeroot>
if(p->
LChild!
=NULL||p->
RChild!
=NULL>
temp=p->
LChild
p->
LChild=p->
RChild=temp。
exchange(p->
LChild>
RChild>
算法(二>
{
temp=p->
p->
第六章习题解读
1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态
个人资料整_仅限学习使用.
2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。
3.已知一棵度为k的树中有ni个度为1的结点,n2个度为2的结点,nk个度为k的结点,则该树中有多少个叶子结点?
[提示]:
参考P.116性质3
n=n0+n1++nk
B=n1+2n2+3n3++knk
n=B+1
n0+n1++nk=n1+2n2+3n3++knk+1
n0=n2+2n3++(k-1>
nk+1
4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为
ABCDEFGHIJK,请画出该二叉树。
参考P.148
6.已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多
少个?
[方法1]
1)一个叶子结点,总结点数至多有多少个?
结论:
可压缩一度结点
2)满二叉树或完全二叉树具有最少的一度结点
3)可能的最大满二叉树是几层?
有多少叶结点?
如何增补?
25<
50<
26
可能的最大满二叉树是6层
有25=32个叶结点
假设将其中x个变为2度结点后,总叶结点数目为50
贝2x+(32-x>
=50
得:
x=18
此时总结点数目=(26-1>
+18X2
[方法2]
假设完全二叉树的最大非叶结点编号为m,
则最大叶结点编号为2m+1,
(2m+1>
-m=50
m=49
总结点数目=2m+1=99
[方法3]
由性质3:
no=n2+1
即:
50=n2+1
所以:
n2=49
令ni=0得:
n=n0+n2=99
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课后 习题