平衡二叉树

本文详细解释了如何将二叉排序树转换为二叉平衡树,并通过旋转方法来保持树的平衡状态。重点阐述了LL型、RR型、LR型和RL型四种旋转类型及其操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二叉排序树定义
(1)二叉树如果有左子树,则左子树的所有节点都小于根节点
(2)如果有右子树,则右子树的所有节点都大于根节点
(3)二叉树的左子树和右子树也都是二叉排序树
2.二叉平衡树的定义
树的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差不大于1
二叉平衡树的作用在于在查找时,能保证每次查找的速度都差不多。
二叉排序树的代码我已经写过了,而如何将二叉排序树变为二叉平衡树呢?这需要在插入一个树节点是保证这个二叉树仍是平衡二叉树,这需要使用一种旋转的方法,如下:
设二叉树节点上的平衡因子BF(Balance Factor)定义为该节点的左子树的深度减它的右子树的深度。假设由于二叉排序树插入节点而失去平衡的最小子树根节点的指针为a(即a是离插入节点最近,且平衡因子绝对值超过1的节点),则失去平衡后进行调整的规律可归纳为以下4中情况:
平衡二叉树
(1)LL型:
新结点X插在A的左孩子的左子树里,调整方法如图,以B为轴心,将A结点从B结点的右上方转到B结点的右下侧,使A成为B的右孩子。
(2)RR型:
新节点X插在A的右子树的右子树里。调整方法如图,以B为轴心,将A结点从B结点的左上方转到B结点的左下侧,使A成为B的左孩子。
(3)LR型:
新节点X插在A的左孩子的右子树里。调整方法如图,第一步以X为轴心,将B从X的左上方转到X的左下侧,是B成为X的左孩子,X成为A的左孩子。第二步跟LL型处理一样。
(3)RL型:
新节点X插在A的右孩子的左子树里。调整方法如图,第一步以X为轴心,将B从X的右上方转到X的右下侧,是B成为X的右孩子,X成为A的右孩子。第二步跟RR型处理一样。
总结下就是旋转时为了保证依然是排序树,所以基本上就是如图的两种旋转方式,然后都是先转换为RR或者LL型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值