计算二叉排序树试题解析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

【题15】计算二叉排序树

12 n输入序列a=aa…a

12 n

输入:

…n(1≤n≤1000)aa a

12 n

输出:

排序后的a

分析:

排序的方法有很多种,其中我们熟知的泡沫排序法、选择排序法的时间效率为O(n2)。是不是有效率更高的算法呢?有的,二叉排序树就是其中的一种。所谓二叉排序树是指具有下列性质的非空二叉树

⑴若根结点的左子树不空,则左子树的所有结点值均小于根结点值;

⑵若根结点的右子树不空,则右子树的所有结点值均不小于根结点值;

⑶根结的左右树也分别为二叉排序树;

显然,对二叉排序树进行中序遍历,可得出结点值递增的排序序列。我们不妨将二叉排序树的存储结构设为顺序存储结构

Type

benode=record {结点类型}

data:datatype; {值域}

l,r:0..m; {左指针域和右指针域}

end;

Var

b:array[1..m]ofbenode; {二叉排序树}

设a、a、……、a为初始序列。我们按下述规则生成其对应的二叉排序树:

1 2 n

⑴令a为二叉树的根;

1

⑵若aa,则令a为a左子树的根结点;否则令a为a的右子树的根结点;

2 1 2 1 2 1

⑶对a、a、……、a递归重复步骤⑵;

3 4 n

二叉排序树的构造过程如下:

procedurecreatetree;begin

fillchar(b,sizeof(b),0); {二叉排序树初始化}

b[1]←a;

1

fori←2tondo

begin

b[i]←a;p←1;

i

whiletruedo

begin

ifab[p].data

i

then {若ab[p].data,顺左指针方向寻找顶点i的插入位置}

i

ifb[p].l0thenp←b[p].l

elsebeginb[p].l←i;break;end{else}

else {若a≥b[p].data时顺右指针方向寻找顶点i的插入位置}

i

ifb[p].r0thenp←b[p].r

elsebeginb[p].r←i;break;end;{else}

end;{while}

end;{for}end;{createtree}

对以bt为根的二叉排序树进行中序遍历(inorder(bt)),便可以得到a表的递增序列。构造二叉排序树

(1 n)*n

的平均时间复杂度为a(n*logn)。当二叉排序树退化成一条链时,最坏的时间复杂度为W( )。

2 2

显然,在各种排序方法中,二叉排序树的时间效率比较理想。由此得出主程序

readln(n); {读数据个数}

fori←1tondoread(a); {输入a序列}

i

writeln;

createtree; {构造二叉排序树}

inorder(bt); {中序遍历二叉排序树}

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档