社区
数据结构与算法
帖子详情
AVL树的删除操作如何实现
RabbitLBJ
2013-03-11 09:41:11
看了几本数据结构的书,上面都没有将AVL树的删除操作是如何实现的?哪位高人能讲讲过程,如果能提供参考代码就更好了,谢谢
...全文
347
2
打赏
收藏
AVL树的删除操作如何实现
看了几本数据结构的书,上面都没有将AVL树的删除操作是如何实现的?哪位高人能讲讲过程,如果能提供参考代码就更好了,谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tjweilong
2013-03-11
打赏
举报
回复
全部代码 可以看我空间里上传的资源
tjweilong
2013-03-11
打赏
举报
回复
template<class T> AvlTree<T>& AvlTree<T>:: Delete(const T x) { AvlNode<T>* Temp=NULL;//被删除节点的父节点 int Direction= -1; //如果删除元素为其父的左孩子,则OnlyDelete函数将其设置为0,否则设置为1。该参数第一次右OnlyDelete函数设置,后续右本函数来设置 cout<<"删除元素:"<<x<<endl; OnlyDelete(x,&Temp,Direction); if(!Root) { cout<<"树已经空了,不需要再调整"<<endl; return *this; } if(!Temp) { PRINT_ERROR_MSG("没有找到要删除的元素"); } //运行到这里,Temp即为被删除元素的父节点,从Temp开始向根节点方向进行调整。 int AdjustFlag = 1;//调整标志,如果是0,不调整,如果为1,则进行调整; while(Temp) { if(AdjustFlag == 0) { cout<<"不再需要调整"<<endl; break; } if(Direction == 0) { Temp->Balance -=1; switch(Temp->Balance) { case 0: AdjustFlag = 1; break; case 1: PRINT_ERROR_MSG("删除左子树上节点,删除之后平衡因子为1,这种情况是不存在的"); break; case 2: PRINT_ERROR_MSG("删除左子树上节点,删除之后平衡因子为2,这种情况是不存在的"); break; case -1: cout<<"删除左子树节点,并且删除之后,因子为-1,此时不需要调整"<<endl; AdjustFlag = 0; break; case -2: cout<<"删除左子树节点,并且删除之后,因子为-2,此时需要调整,根据其右边第一个子节点情况来进行调整"<<endl; L_Rotate(Temp,AdjustFlag); break; } } if(Direction == 1) { Temp->Balance += 1; switch(Temp->Balance) { case 0: AdjustFlag = 1; break; case 1: cout<<"这种情况下,不需要调整"<<endl; AdjustFlag = 0; break; case -1: PRINT_ERROR_MSG("这种情况是不存在的:删除右子树节点之后,balance=-1"); AdjustFlag = 0; break; case 2: cout<<"需要调整"<<endl; R_Rotate(Temp->Parent,AdjustFlag); } } if(Temp->Parent) { if(Temp==Temp->Parent->Left) { Direction = 0; } if(Temp == Temp->Parent->Right) { Direction = 1; } } Temp = Temp->Parent; } return *this; }
AVL树
的C++
实现
AVL树
的C++
实现
,包括初始化,插入,
删除
,遍历,搜索等
操作
,有注释
C++版
AVL树
课程设计源代码
该程序通过C++
实现
了
AVL树
的一些基础
操作
:1.编写
AVL树
判别程序,并判别一个二叉搜索树是否为
AVL树
;2.
实现
AVL树
的ADT,包括其上的基本
操作
:结点的加入和
删除
;3.
实现
基本
操作
的动态演示(图形演示);最重要的是,该程序可以画出你所输入的树
数据结构+算法综合资料库
数据结构与算法综合资料库(CHM) 程序员必备的基础资料,对数据结构与算法很详细的讲解,里面还有许多示例,大家可以参考,学习编程语言都要用到的基础资料。初级走向高级必修的内功心法!
1000多种java算法大全源码包
1000多种java算法大全源码包
AVL树
的
删除
引言
AVL树
的定义及性质及其重要的插入方法,我已在
AVL树
的插入一文中详细阐述过了,其中重要的旋转也已进行详细描述。 本文就不再赘述了,直接使用,要是不清楚的小伙伴,还请移步
AVL树
的插入再回头复习一下下。
AVL树
的
删除
AVL树
的
删除
步骤如下: 寻找
删除
目标(存不存在,定位出目标) 判断
删除
目标的类型,使用转换的思路,将其转化为
删除
叶子 将
删除
目标与
AVL树
链接断开,调整平衡,完成
删除
寻找
删除
目标 寻找
删除
目标的思路很简单,因
AVL树
也属于BST,因此寻找目标的做法与BST的
删除
思路基本一致。
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章