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 则进行失衡调整,各种情况上文有分析

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

 

相关文章
|
16天前
|
存储 C++
【C++】AVL树
AVL树是一种自平衡二叉搜索树,由Georgy Adelson-Velsky和Evgenii Landis提出。它通过确保任意节点的两子树高度差不超过1来维持平衡,支持高效插入、删除和查找操作,时间复杂度为O(log n)。AVL树通过四种旋转操作(左旋、右旋、左-右旋、右-左旋)来恢复树的平衡状态,适用于需要频繁进行数据操作的场景。
29 2
|
6月前
|
C++
【c++】avl树
【c++】avl树
39 0
|
7月前
AVL 树
AVL 树
57 2
|
C++
【C++】AVL树的实现及测试
【C++】AVL树的实现及测试
69 0
|
7月前
|
C++ 容器
【C++】—— 详解AVL树
【C++】—— 详解AVL树
|
C++
C++实现AVL树
C++实现AVL树
63 0
|
机器学习/深度学习 C++
AVL树的插入(C++实现)
AVL树的插入(C++实现)
75 0
|
测试技术 C++ Perl
C++之AVL树(下)
C++之AVL树(下)
78 0
|
C++ 容器
C++之AVL树(上)
C++之AVL树(上)
121 0