第九章查找统一作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章 查找
作业:9.3 9.8 9.31 9.33
===============================================================================
◆9.3② 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成 功的平均查找长度。 习题集参考答案:
等概率查找时查找成功的平均查找长度为
ASL succ =(1*1+2*2+3*4+4*3)/10
=2.9
网上参考答案:无参考答案
◆9.8③ 已知含12个关键字的有序表及其相应权值为:
(1)试按次优查找树的构造算法并加适当调整画出由这12个关键字构造所得的次 优查找树,并计算它的PH 值;
(2)画出对以上有序表进行折半查找的判定树,并计算它的PH 值。 习题集参考答案:
(1) 次优查找树如下所示,其PH 值为133;
(2) 对BCD
对于调整后的PH小于调整前的PH值的原因,还不是很清楚。
网上参考答案:无参考答案
◆9.31④试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构。且树中结点的关键字均不同。
习题集参考答案:
注意仔细研究二叉排序树的定义。易犯的典型错误是按下述思路进行判别:
“若一棵非空的二叉树其左、右子树均为二叉排序树,且左子树的根的值小于根结点的值,又根结点的值不大于右子树的根的值,则是二叉排序树。”
假如你准备写递归形式的算法,则建议你采用如下所述的函数首部,
bool BiSortTree(BiTree T, BiTree &PRE)
其中PRE为指向当前访问结点的前驱的指针。
网上参考答案:
int last=0,flag=1;
int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0
{
if(T->lchild&&flag) Is_BSTree(T->lchild);
if(T->lchild&&flag) Is_BSTree(T->lchild);
if(T->data last=T->data; if(T->rchild&&flag) Is_BSTree(T->rchild); return flag; }//Is_BSTree ◆9.33③编写递归算法,从大到小输出给定二叉排序树中所有关键字不小于x的数 n+m),其中n为排序树中所含结点数,m 据元素。要求你的算法的时间复杂度为O(log 2 为输出的关键字个数。 习题集参考答案: 为满足题目所要求的时间复杂度,算法中应注意做到,一旦访问到关键字小于 x的结点,立即结束遍历。 网上参考答案: void Print_NLT(BiTree T,int x)//从大到小输出二叉排序树T中所有不小于x的元素 { if(T->rchild) Print_NLT(T->rchild,x); if(T->data printf("%d\n",T->data); if(T->lchild) Print_NLT(T->lchild,x); //先右后左的中序遍历 }//Print_NLT