没有合适的资源?快使用搜索试试~ 我知道了~
数据机构实验报告:二叉树的应用:二叉排序树BST和平衡二叉树AVL的构造实验报告.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 201 浏览量
2021-12-18
17:49:49
上传
评论 1
收藏 3.07MB DOC 举报
温馨提示
试读
36页
二叉树的应用:二叉排序树BST和平衡二叉树AVL的构造实验报告
资源推荐
资源详情
资源评论
计算机专业类课程
实验报告
课程名称:数据结构与算法
日 期:2018 年 10 月 10 日
电子科技大学计算机学院实验中心
实验报告撰写说明
此标准实验报告模板系周益民发布。其中含有三份完整实验报告的示例。
黑色文字部分,实验报告严格保留。公式为黑色不在此列。
蓝色文字部分,需要按照每位同学的理解就行改写。
红色文字部分,删除后按照每位同学实际情况写作。
在实验素材完备的情况下,报告写作锻炼写作能力。实验最终的评定成绩
与报告撰写的工整性、完整性密切相关。也就是,你需要细节阐述在实验中遇
到的问题,解决的方案,多样性的测试和对比结果的呈现。图文并茂、格式统
一。
电 子 科 技 大 学
实 验 报 告
实验一
一、实验名称:
二叉树的应用:二叉排序树 BST 和平衡二叉树 AVL 的构造
二、实验学时:4
三、实验内容和目的:
树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直
观看来,树是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如
人类社会的族谱和各种社会组织机构都可用树来形象表示。树在计算机领域中
也得到广泛应用,如在编译程序中,可用树来表示源程序的语法结构。又如在
数据库系统中,树型结构也是信息的重要组织形式之一。
实验内容包含有二:
二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其
定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:1.若它的左
子树非空,则左子树上所有结点的值均小于根结点的值;2.若它的右子树非空,
则右子树上所有结点的值均大于根结点的值;3.左、右子树本身又各是一棵二
叉排序树。
平衡二叉树(Balanced Binary Tree)又被称为 AVL 树。具有以下性质:它
是一棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子
树都是一棵平衡二叉树。构造与调整方法。
实验目的:
二叉排序树的实现
(1) 用二叉链表作存储结构,生成一棵二叉排序树 T。
(2) 对二叉排序树 T 作中序遍历,输出结果。
1
(3) 输入元素 x,查找二叉排序树 T,若存在含 x 的结点,则返回结点指针。
平衡二叉树的实现
(1) 用二叉链表作为存储结构,输入数列 L,生成一棵平衡二叉树 T。
(2) 对平衡二叉树 T 作中序遍历,输出结果。
四、实验原理
二叉排序树的实现
(1) 二叉排序树节点的插入
在二叉排序树中插入新节点,要保证插入后的二叉树仍然符合二叉排序树
的定义,即二叉排序树中的每一个节点的左子树的值都要比该节点小,右子树
的值都要比该节点大。插入过程:若二叉排序树为空,则待插入节点*Node 作
为根节点插入到空树中;若二叉排序树非空,将待插入节点的值*Node->data 与
根节点的值*TreeRoot->data 进行比较,若*Node->data=*TreeRoot->data,则无需
插入;若*Node->data<*TreeRoot->data,则该值插入到根节点的左子树中;若
*Node->data>*TreeRoot->data,则该值插入到根节点的右子树中。在子树的插入
过程和在树中的插入过程相同,如此进行下去,直到把数列的每一个节点
*Node 作为一个新的叶子插入到二叉排序树中,或者直到发现树已有相同的值
的为止。
(2) 生成了一棵二叉排序树
1. 每次插入的新结点都是二叉排序树上新的叶子结点。
2. 由不同顺序的关键字序列,会得到不同二叉排序树。
3. 对于一个任意的关键字序列构造一棵二叉排序树,其实质上对关键字进
行排序。
(3) 二叉排序树节点的删除
在二叉排序树中删除节点,要保证删除后的二叉树仍然符合二叉排序树的
定义,即二叉排序树中的每一个节点的左子树的值都要比该节点小,右子树的
值都要比该节点大。要删除二叉排序树中的某一个节点首先需要查找该节点在
二叉排序树中是否存在,将待删除节点的值*Node->data 与二叉排序树的根节点
的值*TreeRoot->data 进行比较,若*Node->data=*TreeRoot->data,则证明查找到
待删除节点,进行下一步删除操作;若*Node->data<*TreeRoot->data,则将待删
除节点与根节点的左孩子的值进行比较;若*Node->data<*TreeRoot->data,则将
待删除节点与根节点的右孩子的值进行比较;直到查找到待删除节点为止,或
者二叉排序树不存在该节点,终止删除操作。删除过程要分三种情况:①待删
除节点为二叉排序树的叶子节点,删除该节点不会影响二叉排序树的特性,只
需将其父节点相应的指针域改为空指针即可;②待删除节点为只含有一棵子树
的节点,删除该节点只需令其父节点相应的指针域指向该节点对应的子树即可;
③待删除节点为含有左右子树的节点,删除该节点需要使用其中序遍历的前驱
代替之,代替之后将其前驱删除。换言之,即使用待删除节点右子树中的最小
值代替该节点的值,并将最小值所处的节点删除。
平衡二叉树的实现
(1)平衡二叉树节点的插入
1. 使用上述构建二叉排序树的方法对节点进行插入。
2
2. 因为二叉排序树的插入是将新节点插入到树的叶子节点,因此可以在插
入递归返回的过程中更新每个节点的平衡因子*Node->bf,即计算该节点的左子
树与右子树高度的差。
3. 根据 A、B 的平衡因子,判断是否失衡及失衡类型,并作旋转处理。
4. 如果平衡因子*Node->bf>=2,则证明节点在左子树插入导致失衡,此时
分两种情况,①插入的值小于失衡节点左子树的值即 data < (*Node)->lchild-
>data,则证明失衡是在该节点的左子树的左子树插入节点导致的,进行 LL 型
平衡旋转;②插入的值大于失衡节点左子树的 值 即 data > (*Node)->lchild-
>data,则证明失衡是在该节点的左子树的右子树插入节点导致的,进行 LR 型
平衡旋转。
5. 如果平衡因子*Node->bf<=-2,则证明节点在右子树插入导致失衡,此时
分两种情况,①插入的值大于失衡节点右子树的值即 data>(*Node)->rchild-
>data,则证明失衡是在该节点的右子树的右子树插入节点导致的,进行 RR 型
平衡旋转;②插入的值小于失衡节点左子树的值即 data<(*Node)->lchild->data,
则证明失衡是在该节点的右子树的左子树插入节点导致的,进行 RL 型平衡旋
转。
LL 型平衡旋转
由于在 A 的左孩子的左子树上插入结点使 A 的平衡因子由 1 增到 2 而使树
失去平衡。调整方法是将子树 A 进行一次顺时针旋转。具体方法是将失衡节点
的左指针指向其左孩子的右子树,将其左孩子的右指针指向该失衡节点。随即
更新这两个节点的平衡因子。
RR 型平衡旋转
其实这和第一种 LL 型是镜像对称的,由于在 A 的右子树的右子树上插入
结点使得 A 的平衡因子由 1 增为 2;解决方法也类似,只要进行一次逆时针旋
转。具体方式是将失衡节点的右指针指向其右孩子的左子树,将其右孩子的左
指针指向该失衡节点。随即更新这两个节点的平衡因子。
LR 型平衡旋转
这种情况稍复杂些。是在 A 的左子树的右子树 C 上插入了结点引起失衡。
但具体是在插入在 C 的左子树还是右子树却并不影响解决方法,只要进行两次
旋转(先逆时针,后顺时针)即可恢复平衡。具体操作是先对失衡节点的左孩
子进行左旋(RR)操作,然后再对失衡节点本身进行右旋(LL)操作。
RL 平衡旋转
也是 LR 型的镜像对称,是 A 的右子树的左子树上插入的结点所致,也需
进行两次旋转(先顺时针,后逆时针)恢复平衡。具体操作是先对失衡节点的右
孩子进行右旋(LL)操作,然后再对失衡节点本身进行左旋(RR)操作。
(2) 生成了一棵平衡二叉树
1. 每次插入的新结点都是平衡二叉树上新的叶子结点。
2. 由于插入节点可能会破坏平衡二叉树的性质,因此在插入节点后需要进
行调整以维护二叉树的平衡性。
3. 由不同顺序的关键字序列,可能会得到不同二叉排序树。平衡二叉树既
持了二叉排序树排序的性质,又降低了原来操作的复杂度。
(3) 平衡二叉树的删除
在二叉排序树中删除节点,要保证删除后的二叉树仍然符合平衡二叉树的
定义。对于排序性的维护,可以延用上述二叉排序树的做法。对于平衡性的维
3
剩余35页未读,继续阅读
资源评论
- 抚刺752023-06-26感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
- CAIVII2022-01-16用户下载后在一定时间内未进行评价,系统默认好评。
- weixin_508743612022-06-24用户下载后在一定时间内未进行评价,系统默认好评。
我慢慢地也过来了
- 粉丝: 5859
- 资源: 3759
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功