- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
u 内容提要
本讲首先简要介绍了树的几种常见的存贮结构、森林和二叉树的相互转换。接着介绍了二叉排序树(通过对二叉排序树进一次中序遍历,即可将无序数据排列成有序序列),堆及堆排序(堆排序使用的辅助空间较少,仅增加一个记录空间用于交换,同时关键字比较的次数和树形选择排序相当)。
重点之一:阐述二叉排序树的概念,讨论二叉排序树的生成,二叉排序树的插入、删除,及二叉排序树的应用。
重点之二:阐述堆的概念,讨论堆的存储、堆排序的基本思想,介绍堆排序的过程,堆的插入、删除操作, 堆排序的应用。
u 知识讲解和实例分析一、 树和森林:
1、 树的存贮结构
、双亲表示法
利用每个结点(除根结点外)只有唯一双亲的特点,用二维数组来存贮一棵一般树。这种结构对于寻求某结点的双亲及求树的根结点等操作是很方便的,但用于求结点的孩子时比较麻烦,需要遍历整个数组。
、孩子表示法
用多重链表来存贮一般树。在多重链表中,每个结点有多个指针域,每个指针域指向一棵子树的根结点, 此时有两种结点结构:A、多重链表中的结点是同构的,则会浪费较多的存贮空间;B、多重链表中的结点是不同构的,虽然节约存贮空间,但操作不方便。
、孩子兄弟表示法
最常用的存储方法是孩子兄弟表示法。即以二叉树链表作为树的链表。链表中结点的两个指针域分别指向该结点的第一个孩子和下一个兄弟结点。
2、 森林和二叉树的转换:
、森林转换为二叉树:
如果 F={T1,T2,…,Tm}是森林,则可按下列规则转换成二叉树 B={root,LB,RB}
、若 F 为空,即 m=0,则 B 为空树。
、若 F 不为空,即 m 不为 0,则 B 的根即为森林中第一棵树的根;B 的左子树 LB 是从森林 F1={T11, T12……T1m}转换而成的二叉树;其右子树 RB 是从森林 F’ ={T2,T3,…Tm}转换而成的二叉树。
、二叉树转换为森林:
、若 B 为空,则 F 为空。
、若 B 非空,则 F 中第一棵树 T1 的根 ROOT(T1)即为二叉树 B 的根 root;T1 中根的子树森林 F1 是由 B 的左子树 LB 转换而成的森林;F 中除 T1 之外,其余树组成的森林 F’ ={T2,T3,…Tm}是由 B 的右子树 RB 转换击成的森林。
二、二叉排序树:
1、 二叉排序树的定义:
二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:
、若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
、若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
、它的左、右子树也分别是二叉排序树。
2、 二叉排序树的查找:
在二叉排序树 b 中查找 x 的过程为:
、若 b 是空树,则搜索失败;否则
、若 x 等于 b 的根结点的数据域的值,则查找成功;否则
、若 x 小于 b 的根结点的数据域的值,则搜索左子树;否则
、搜索右子树
function search(b:btree;x:integer):btree; begin
If (b=nil) then search:=nil Else begin
If (b^.data=x) then search:=b;
If (x If (xb^.data) then search:=search(b^.right,x); end;
end;
3、 二叉排序树的生成:
首先讨论向一棵二叉排序树 b 中插入一个结点 s 的算法,其过程为:
、若 b 是空树,则将s 作为根结点插入;否则
、若 s^.data 等于b 的根结点的数据域之值,则返回;否则
、若 s^.data 小于b 的根结点的数据域之值,则把s 结点插入到左子树中;否则
、把 s 结点插入到右子树中。
向一棵二叉排序树 b 中插入一个结点s 的过程如下:
procedure insert(var b:btree;s:btree); begin
if (b=nil) then b:=s else if (s^.data
else if (s^.datab^.data) then insert(b^.right,s) end;
生成二叉排序树的过程是先有一个空树 b,然后逐个向该空树中插入结点实现的。因此根据用户输入的一系列正整数(—1 表示结束)生成一棵二叉排序树的过程如下:
procedure creat(var b:btree); var x:integer;
s:btree; begin b:=nil; read(x);
while x==-1 do begin
new(s); s^.data:=x; s^.left:=nil; s^.right:=nil; insert(b,s);
read(x); end
end;
4、 二叉排序树的删除:
删除二叉排序树 b 中一个数据域为x 的
您可能关注的文档
- Netapp E系列无法启动解决方案.docx
- New Balance品牌故事分析和总结.docx
- Ngin常用超时配置.docx
- Ngin负载均衡配置.docx
- NHE3 U6 复习卷分析和总结.docx
- NHE3U6-10期中复习(中文).docx
- noip普及组复赛模拟试题14(附答案).docx
- NOR Flash 和 NAND Flash分析和总结.docx
- Northern Ireland分析和总结最新分析和总结.docx
- not until用法分析和总结.docx
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)