平衡二叉搜索树:AVL树的实现与分析 以及 统一重平衡算法 (C++)

本文介绍了平衡二叉搜索树中的AVL树,详细阐述了平衡因子、插入和删除操作可能导致的不平衡问题以及解决这些问题的单旋、双旋调整策略。此外,还讲解了一种统一的重平衡算法,通过‘3 + 4’重构方法确保树的平衡,以保持高效查找性能。
摘要由CSDN通过智能技术生成

平衡二叉搜索树

既然二叉搜索树的性能主要取决于高度,故在节点数目固定的前提下,应尽可能地降低高度。
相应地,应尽可能地使兄弟子树的高度彼此接近,即全树尽可能地平衡。

 

等价变换

等价二叉搜索树:若两棵二叉搜索树的中序遍历序列相同,则称它们彼此等价;反之亦然。

 

旋转调整

最基本的修复手段,通过围绕特定节点的旋转,实现等价前提下的局部拓扑调整。

zig和zag:

                              

 

AVL树

平衡因子

任一节点v的平衡因子(balance factor)定义为“其左、右子树的高度差”,即:

         balFac(v) = height(lc(v)) - height(rc(v))

所谓AVL树,即平衡因子受限的二叉搜索树其中各节点平衡因子的绝对值均不超过1。

 

1.接口定义

基于BST模板类,可以直接派生出AVL模板类

#include "../BST/BST.h" //基于BST实现AVL树
template <typename T> class AVL : public BST<T> { //由BST派生AVL树模板类
public:
    BinNodePosi(T) insert(const T& e);    //插入(重写)
    bool remove(const T& e);        //删除(重写)
// BST::search()等其余接口可直接沿用
};

 

为简化对节点平衡性的判断

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值