第九章查找统一作业答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档