ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:20KB ,
资源ID:7151141      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7151141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二叉平衡排序树Word文档下载推荐.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

二叉平衡排序树Word文档下载推荐.docx

1、 node* right; int balance; /左右子树高度之差 int key;2、主要函数说明int searchNode(int key, node* root, node* parent) :按key查找结点node* minNode(node* root) :树root的最小结点node* maxNode(node* root) :树root的最大结点node* preNode(node* target) :求前驱结点node* nextNode(node* target) :求后继结点node* adjustAVL(node* root, node* parent, nod

2、e* child) :调整,保证二叉树的平衡性node* insertNode(int key, node* root) :插入node* deleteNode(int key, node* root) : 删除node* createAVL(int *data, int size) :建造新的二叉树void interordertraverse(node* root) :中序遍历void preordertraverse(node* root) :先序遍历3、二叉排序树的插入和删除 a. 二叉排序树的插入在二叉排序树中插入新结点,要保证插入后的二叉树仍符合二叉排序树的定义。插入过程:若二叉排

3、序树已存在,则返回根节点;当节点不存在时,将待插结点关键字key和树根关键字parent-key进行比较,若keykey,则插入到根的左子树中,否则,则插入到根的右子树中。而子树中的插入过程和在树中的插入过程相同,如此进行下去,直到把结点作为一个新的树叶插入到二叉排序树中,或者直到发现树已有相同关键字的结点为止。并且注意二叉树的平衡性,时刻调整。 b. 二叉排序树的删除假设在二叉排序树上被删结点为*tp,其双亲结点为*parent,且不失一般性,可设* *parent是* parent-left;的左孩子。 下面分3种情况进行讨论:(1)若*parent结点为叶子结点,即PL和PR均为空树。由

4、于删去叶子结点不破坏整棵树的结构,则只需要修改其双亲结点的指针即可。(2)若*parent结点只有左子树PL或者只有右子树PR,此时只要令PL或PR直接成为其双亲结点*f的左子树即可。显然,作此修改也不破坏二叉排序树的特性。(3)若*parent结点的左子树和右子树均不空。4、中序遍历和先序遍历void interordertraverse(node* root) /中序遍历 if (root != NULL) interordertraverse(root-left); printf(%d, %dn, root-key, root-balance);right); void preorder

5、traverse(node* root) /先序遍历 preordertraverse(root-5、调整二叉树的平衡性node* adjustAVL(node* root, node* parent, node* child)主要有四种调整类型根据平衡因子主要有LR、LL、RL、RR(1)、根据parent-balance的值为2时,child-balance = -1 时是LR型,否则为LL型;if (child-balance = -1) /LR型 cur = child-right; cur-parent = parent-parent; child-right = cur- if (

6、cur-left !left-parent = child; parent-left = cur-right !right-parent = parent;left = child;parent = cur;right = parent; if (parent-parent !left = parent)left = cur; else parent-right = cur; else root = cur;balance = 0)balance = 0; else if (cur-balance = -1) balance = 1; balance = -1; else /LL型left =

7、 child- if (child-right = child; root = child;balance = 1) /插入时 else /删除时 break;(2)、parent-balance的值为-2时,child-balance = 1时是RL型,否则为RRbalance = 1) /RL型left = parent;balance = 1) else /RR型right = child-balance = -1) /插入时6、主函数void main()给出了一组数据1, 13, 7, 4,对数据中序遍历和先序遍历,然后是插入、删除、查询、退出操作。三、系统实现运行环境Windows

8、 7 操作系统,Microsoft Visual C+ 6.0。四、程序#include string.hstdlib.herrno.hassert.h / assert用于调试声明宏,用于定位程序开发中的逻辑 /错误当参数expression为false时程序执行被中断 node* parent; /平衡因子(左右子树高度之差)extern void interordertraverse(node* root); /中序遍历extern void preordertraverse(node* root); /前序遍历int searchNode(int key, node* root, no

9、de* parent) /按key查找结点 node* temp; assert(root != NULL); temp = root; *parent = root- while (temp !=NULL) if (temp-key = key) return 1; else *parent = temp;key key) temp = temp- return 0;node* minNode(node* root) /树root的最小结点 if (root = NULL) return NULL; while (root- root = root- return root;node* ma

10、xNode(node* root) /树root的最大结点node* preNode(node* target) /求前驱结点 if (target = NULL) if (target- return maxNode(target- while (target-parent!=NULL) & (target!=target-right) target = target- return target-node* nextNode(node* target) /求后继结点 return minNode(target-left)node* adjustAVL(node* root, node* p

11、arent, node* child)/调整旋转操作/保持二叉排序树的平衡性 node *cur; assert(parent != NULL)&(child != NULL); switch (parent-balance) case 2:/平衡因子由1增至2balance = -1) /LR型双向旋转(先左后右)平衡处理 cur- if (parent- parent- else parent- root = cur; child- else /LL型单向右旋平衡处理 root = child; case -2:/平衡因子由-1变为-2 if (child-balance = 1) /RL

12、型双向旋转(先右后左)平衡处理 cur = child- if (cur- cur- if (parent- else parent- else root = cur; parent- child- else if (cur- else /RR型单向左旋平衡处理 parent- root = child; else /删除时 break;node* insertNode(int key, node* root)/插入 node *parent, *cur, *child; assert (root ! if (searchNode(key, root, &parent) /结点已存在 return root; else/节点不存在 cur = (node*)malloc(sizeof(node);key = key;left = NULL;right = NULL; if (key while (parent != NULL) /查找需要调整的最小子树 if (child = parent-left) return root; else if (parent-balance = 2; break; else

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2