AVL树的删除探讨

简介:

AVL树的删除很多教材上都没有提供,本人对AVL树有着较为深入的研究。现在晒出大体的算法思想。

 3.2 1 递归法
递归实现 AVL 树的结点删除的思想如下。
   AVL T 上删除值为 E 的结点步骤如下:
(1)       若树 T 为空,返回 0 退出否则到( 2 ;
(2)       比较 T 的数据和 E ,若相等跳到( 3 ),若 E 小于 T->data 跳到( 4 ),若 E 大于 T->data 则跳到( 5
(3)       分析 T 结点的类型
(3.1) T 是叶子结点则直接删除 , 树变矮即 lower=1
(3.2) T 只有右子树 TR 则将右子树结点的值赋给 T ,删除 TR 结点将 T->rchild=NULL lower=1;
(3.3) T 有左子树,则找到其中序遍历的前驱结点 P ,将 P 结点值用临时变量 temp 保存,并且用指针 Tptr 保存 T ;递归删除结点 P ;将 Tptr 所指结点即原 T 结点的值更新为 temp
  4 )在左子树 T->lchild 中递归删除值为 E 的结点,若删除成功检查左子树是否变矮即 lower 的值是否为 1 ;若 lower=0 返回 0 退出;若 lower=1 则进行失衡调整各种情况上文有分析
  5 )在右子树 T->rchild 中递归删除值为 E 的结点,若删除成功检查左子树是否变矮即 lower 的值是否为 1 ;若 lower=0 返回 0 退出;若 lower=1 则进行失衡调整,各种情况上文有分析

大家可以很容易的实现。上文提到的平衡处理情况,很多书籍都有。

 

相关文章
|
25天前
AVL 树
AVL 树
15 2
|
1月前
|
C++ 容器
【C++】—— 详解AVL树
【C++】—— 详解AVL树
|
4月前
|
存储 测试技术 C++
C++【AVL树】
C++【AVL树】
41 0
|
4月前
|
C++
C++实现AVL树
C++实现AVL树
35 0
|
6月前
|
机器学习/深度学习 C++
AVL树的插入(C++实现)
AVL树的插入(C++实现)
48 0
|
10月前
|
算法 Java Python
实现AVL树
大家好,我是王有志。今天,我们会用Java和Python分别实现第一个平衡二分搜索树--AVL树。
60 0
实现AVL树
|
10月前
|
C++ 容器
C++之AVL树(上)
C++之AVL树(上)
92 0
|
10月前
|
测试技术 C++ Perl
C++之AVL树(下)
C++之AVL树(下)
43 0
|
11月前
|
算法 C++ 容器
【C++】AVL树和红黑树的插入
【C++】AVL树和红黑树的插入