平衡二叉树

概念:

结点的平衡因子:二叉树中某结点左子树的高度与右子树的高度之差称为该结点的平衡因子。

平衡二叉树是另一种形式的二叉查找树。

其特点是:左右子树深度之差的绝对值不大于1

称有这种特性的二叉树称为平衡二叉树。

在算法中,可以通过平衡因子来具体实现平衡二叉树的定义。

从平衡因子的角度可以说,若一颗二叉树中所有结点的平衡因子的绝对小于或等于1,则该数称为平衡二叉树。

1.LL型调整

2.RR型调整

3.LR型调整

 4.RL型调整

平衡二叉树中结点的插入与建立

在平衡二叉树BBST中插入一个结点x的大体步骤如下:

·像一般的二叉排序树那样插入X:

若BBST为空树,则插入一个数据元素为x的新结点作为BBST的根结点;

若x的关键字和BBST的根结点的关键字相等,不能进行插入;

若x的关键字小于BBST的根结点的关键字,而且在BBST的左子树中不存在和x有相同关键字的结点,则将x插入在BBST的左子树上;

若x的关键字大于BBST的根结点的关键字,而且在BBST的右子树中不存在和x有相同关键字的结点,则将x插入在BBST的右子树上;

·沿着插入x的路线返回,逐层回溯,必要时修改x祖先的平衡因子,因为插   入x后会使某些子树的高度增加。

·回溯途中,一旦发现x的某个祖先p失衡,即由p->bf=1变成p->bf=2或由p->bf=-1变成p->bf=-2,则旋转以*p为根的子树结构,使之平衡。

平衡二叉树结点的删除

在平衡二叉树上删除结点x(假定平衡二叉树有且仅有一个结点的值等于x)的大体步骤如下:

·用一般的二叉排序树的删除算法找到并删除结点x;

若x结点为叶子结点,由于删去叶子结点不破坏整棵树的结构,则可直接删去该结点;

若x结点只有左子树而无右子树,根据二叉排序树的特点,可以直接将其左子树的根结点放在被删去的结点的位置; 若x结点只有右子树而无左子树,同样根据二叉排序树的特点,可以直接将其右子树的根结点放在被删去的结点的位置;

若x结点同时有左子树和右子树,则根据二叉排序树的特点,可以从其左子树中选择关键字最大的结点或者从其右子树中选择关键字最小的结点放在被删去结点的位置。

·沿根到被删除结点的路线之逆逐层向上回溯,必要时,修改x祖先结点的平衡因子;

·回溯途中,一旦发现x的某个祖先﹡p失衡,就要找到并调整其最小不平衡子树,使之平衡;

·如果旋转之后,子树的总高度(比旋转前)降低了,回溯不能停止。即在平衡二叉树上删除一个结点有可能引起多次旋转。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值