c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案

A.先序 B. 中序 C. 后序 D. 从根开始按层次遍历 (8)若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用( )遍历方法最合适。

A.前序 B.中序 C.后序 D.按层次 (9)在下列存储形式中,( )不是树的存储形式?

A.双亲表示法 B.孩子链表表示法 C.孩子兄弟表示法 D.顺序存储表示法 (10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )。

A.所有的结点均无左孩子 B.所有的结点均无右孩子

C.只有一个叶子结点 D.是任意一棵二叉树

(11)某二叉树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。 A.空或只有一个结点 B.任一结点无左子树

C.高度等于其结点数 D.任一结点无右子树 (12)若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。 A.X的双亲 B.X的右子树中最左的结点 C.X的左子树中最右结点 D.X的左子树中最右叶结点 (13)引入二叉线索树的目的是( )。

A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除

C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一 (14)线索二叉树是一种( )结构。

A.逻辑 B. 逻辑和存储 C.物理 D.线性

(15)设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( )个。

A. n-1 B.n C. n+1 D. n+2

2.应用题

(1)试找出满足下列条件的二叉树

① 先序序列与后序序列相同 ②中序序列与后序序列相同

③ 先序序列与中序序列相同 ④中序序列与层次遍历序列相同 先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:“左子树—右子树―根",根据以上原则,本题解答如下: (1) 若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树

(2) 若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树. (3) 若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树. (4) 若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树

(2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C ①画出这棵二叉树。

②画出这棵二叉树的后序线索树。

③将这棵二叉树转换成对应的树(或森林)。

A BAB F DECCA

DnullEC

D F

EMG

H

BMGHFGH(3)

(1) (2)

(3) 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,

0.19,0.02,0.06,0.32,0.03,0.21,0.10。

① 试为这8个字母设计赫夫曼编码。

② 试设计另一种由二进制表示的等长编码方案。 ③ 对于上述实例,比较两种方案的优缺点。 解:方案1;哈夫曼编码

先将概率放大100倍,以方便构造哈夫曼树。 0 】 , 1 19, 21, 32 w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3), 6], (7,10)??

0 1 0 1 19 21 32 0 1 0 1 0 1 7 10 6 0 1 2 3 (100)

(40) (60) 19 21 32 (28)

(17) (11) 7 10 6 (5)

2 3

方案比较: 编号 1 2 3 4 5 6 7 8 字母对应编码 1100 00 11110 1110 10 11111 01 1101 案

出现频率 0.07 0.19 0.02 0.06 0.32 0.03 0.21 0.10 1

字母编号 1 2 3 4 5 6 7 8 的

对应编码 000 001 010 011 100 101 110 111 WPL

出现频率 0.07 0.19 0.02 0.06 0.32 0.03 0.21 0.10 =

2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61

方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3 结论:哈夫曼编码优于等长二进制编码

(4)已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8,11,试填写出其对应哈夫曼树HT的存储结构的初态和终态。

初态: 1 2 3 4 5 6 7 8 9 10 11 12 weight 3 12 7 4 2 8 11 parent 0 0 0 0 0 0 0 0 0 0 0 0 lchild 0 0 0 0 0 0 0 0 0 0 0 0 rchild 0 0 0 0 0 0 0 0 0 0 0 0 13 终态

1 2 3 4 5 6 7 8 9 10 11 12 13 0 0 0

weight 3 12 7 4 2 8 11 5 9 15 20 27 47 parent 8 12 10 9 8 10 11 9 11 12 13 13 0 lchild 0 0 0 0 0 0 0 5 4 3 9 2 11 rchild 0 0 0 0 0 0 0 1 8 6 7 10 12

3.算法设计题

以二叉链表作为二叉树的存储结构,编写以下算法: (1)统计二叉树的叶结点个数。 int LeafNodeCount(BiTree T) {

if(T==NULL) return 0; //如果是空树,则叶子结点个

数为0 else if(T->lchild==NULL&&T->rchild==NULL) return 1; //判断该结点是否是叶子结点

(左孩子右孩子都为空),若是则返回1

else

return LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild); }

(2)判别两棵树是否相等。

(3)交换二叉树每个结点的左孩子和右孩子。 void ChangeLR(BiTree &T) {

BiTree temp;

if(T->lchild==NULL&&T->rchild==NULL) return; else {

temp = T->lchild; T->lchild = T->rchild; T->rchild = temp;

}

ChangeLR(T->lchild); ChangeLR(T->rchild);

}

(4)设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。

void DoubleTraverse(BiTree T) {

}

(5)计算二叉树最大的宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。 [题目分析] 求二叉树高度的算法见上题。求最大宽度可采用层次遍历的方法,记下各层结点数,每层遍历完毕,若结点数大于原先最大宽度,则修改最大宽度。 int Width(BiTree bt)//求二叉树bt的最大宽度

{if (bt==null) return (0); //空二叉树宽度为0 else

if(T == NULL) return;

else if(T->lchild==NULL&&T->rchild==NULL) cout

cout

DoubleTraverse(T->lchild); cout

DoubleTraverse(T->rchild);

以上是由77cn范文大全为大家整理的数据结构(C语言版)第五六章习题答案的相关范文,本文关键词为数据结构,语言,第五,六章,习题,答案,5章,二叉,选择,棵,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。

数据结构(C语言版)第五六章习题答案.doc

免费范文网为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。

已有11人下载

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库数据结构(C语言版)第五六章习题答案在线全文阅读。

本文来自:免费范文网(www.77cn.com.cn) 转载请注明出处!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值