数据结构课后习题及解析第六章Word文件下载.docx

上传人:b****3 文档编号:13751059 上传时间:2022-10-13 格式:DOCX 页数:11 大小:19.69KB
下载 相关 举报
数据结构课后习题及解析第六章Word文件下载.docx_第1页
第1页 / 共11页
数据结构课后习题及解析第六章Word文件下载.docx_第2页
第2页 / 共11页
数据结构课后习题及解析第六章Word文件下载.docx_第3页
第3页 / 共11页
数据结构课后习题及解析第六章Word文件下载.docx_第4页
第4页 / 共11页
数据结构课后习题及解析第六章Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构课后习题及解析第六章Word文件下载.docx

《数据结构课后习题及解析第六章Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课后习题及解析第六章Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构课后习题及解析第六章Word文件下载.docx

对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。

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个结点的二叉树的所有不同形态。

【解答】

具有3个结点的树 

 

具有3个结点的二叉树 

1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点?

【解答】设树中结点总数为n,则n=n0+n1+……+nk

树中分支数目为B,则B=n1+2n2+3n3+……+knk

因为除根结点外,每个结点均对应一个进入它的分支,所以有n=B+1

即n0+n1+……+nk=n1+2n2+3n3+……+knk+1

由上式可得叶子结点数为:

n0=n2+2n3+……+(k-1)nk+1

6.5已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个?

【解答】n0表示叶子结点数,n2表示度为2的结点数,则n0=n2+1

所以n2=n0–1=49,当二叉树中没有度为1的结点时,总结点数n=n0+n2=99

6.6试分别找出满足以下条件的所有二叉树:

(1)前序序列与中序序列相同;

(2)中序序列与后序序列相同;

(3)前序序列与后序序列相同。

(1)前序与中序相同:

空树或缺左子树的单支树;

(2)中序与后序相同:

空树或缺右子树的单支树;

(3)前序与后序相同:

空树或只有根结点的二叉树。

6.9 

假设通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:

,,,,,,,

构造哈夫曼树如下:

哈夫曼编码为:

I1:

11111I5:

1100

I2:

11110I6:

10

I3:

1110I7:

01

I4:

1101I8:

00

6.11画出如下图所示树对应的二叉树。

6.15分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继。

(1)找结点的中序前驱结点

BiTNode 

*InPre(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)找结点的中序后继结点

*InSucc(BiTNode 

/*在中序线索二叉树中查找p的中序后继结点,并用succ指针返回结果*/

Rtag==1) 

succ=p->

RChild;

{/*在p的右子树中查找“最左下端”结点*/

Ltag==0;

LChild);

succ=q;

return(succ);

(3)找结点的先序后继结点

*PreSucc(BiTNode 

/*在先序线索二叉树中查找p的先序后继结点,并用succ指针返回结果*/

Ltag==0) 

else 

succ=p->

(4)找结点的后序前驱结点

*SuccPre(BiTNode 

/*在后序线索二叉树中查找p的后序前驱结点,并用pre指针返回结果*/

pre=p->

 

已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。

Void 

PreOrder(BiTree 

root) 

/*先序遍历二叉树的非递归算法*/

{

InitStack(&

S);

p=root;

while(p!

=NULL||!

IsEmpty(S))

{if(p!

=NULL)

{

Visit(p->

data);

push(&

S,p);

p=p->

Lchild;

Pop(&

S,&

p);

p=p->

已知二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换。

算法

(一)

Void 

exchange(BiTree 

root)

if(p->

LChild!

=NULL||p->

RChild!

=NULL)

temp=p->

p->

LChild=p->

p->

RChild=temp;

exchange(p->

LChild);

RChild);

算法

(二)

第六章习题解析

3.已知一棵度为k的树中有n1个度为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

的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。

参考P.148 

6.已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个?

[方法1]

(1)一个叶子结点,总结点数至多有多少个?

结论:

可压缩一度结点。

(2)满二叉树或完全二叉树具有最少的一度结点

(3)可能的最大满二叉树是几层?

有多少叶结点?

如何增补?

25<

50<

26

可能的最大满二叉树是6层

有25=32个叶结点

假设将其中x个变为2度结点后,总叶结点数目为50

则:

2x+(32–x)=50

得:

x=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1