平衡二叉树之C语言实现(插入、删除,分裂、合并)附源代码

平衡二叉树的定义

平衡二叉查找树( Balanced Binary Sort Tree,BBST)简称平衡二叉树。平衡二又树有很多种,其中最著名的是由前苏联数学家 Adele- Veliki和 Landis在1962年提出的高度平衡的二叉树。根据提出者的英文名字首字母简称为AVL树

平衡二叉树或者是棵空树,或者是具有下列性质的二叉查找树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1。若将二叉树结点的平衡因子( Balance Factor)定义为该结点的左子树的高度减去它的右子树的高度,则所有结点的平衡因子只可能为-1、0、1。只要有一个结点的平衡因子的绝对值大于1,那么这棵树就失去了平衡。

平衡二叉树的存储结构及宏定义

#define LH        +1     // 左子树比右子树高
#define EH         0     // 左、右子树等高
#define RH        -1     // 右子树比左子树高

typedef int KeyType;    // 关键字类型为整数类型

typedef struct {
    KeyType key;   // 关键字项
} RecordType, RcdType;    // 记录类型

typedef struct BBSTNode {
    RcdType data;
    int bf;         // 结点平衡因子
    struct BBSTNode *lchild, *rchild;  // 左右孩子
} * BBSTree;  // 平衡二叉树

平衡二叉树的失衡及调整

最小失衡子树

在平衡二叉树中插入一个新结点后,从该结点起向上寻找第一个不平衡的结点(平衡因子bf变为了-2或2),以确定该树是否失衡。若找到,则以该结点为根的子树称为最小失衡子树。

平衡二叉树失衡后则需要调整,需要对失衡的情况进行分类,分为以下四种。

(1). LL型

LL型指的是在最小失衡子树的左孩子的左子树上插入了新的结点。失衡调整如下图所示,先找到最小失衡子树的根A,以其左孩子结点B为轴,对不平衡结点A进行顺时针旋转(也称为右旋)。右旋是让B顶替A的位置,并置A为B的右孩子,如果B存在右子树 BR B R ,则置

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值