首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» 基于树的查找--------------平衡二叉查找树(2)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于树的查找--------------平衡二叉查找树(2)
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2016-8-8 11:18
|
只看该作者
基于树的查找--------------平衡二叉查找树(2)
平衡
1
,
LL
型。(左边重,需往右边转)
LL
型的判断依据就是
:A
节点平衡因子为
2
,
B
节点的平衡因子为
1.
即: A->bf = 2, B->bf = 1.
如果失衡类型是LL
型,这调整算法如下:
以B
点为轴,将
A
节点做顺时针旋转,然后将
B
的右子树作为
A
的左子树。
算法的代码实现如下:(可结合上面的图看)
case
LL
:
B
=
A
-
>
lchild
;
//该类型B节点所在的位置
A
-
>
lchild
=
B
-
>
rchild
;//将B节点的右子树交给A,作为A的左子树
。
B
-
>
rchild
=
A
;//把A作为B的右子树。
A
-
>
bf
=
B
-
>
bf
=
0
;//更新A,B节点的平衡因子的值。
if
(
father_A
=
=
NULL
)
*
root
=
B
;//如果A是根,则现在把B节点设置为根节点。
else
if
(
A
=
=
father_A
-
>
lchild
)
father_A
-
>
lchild
=
B
;//如果原来A是father_A的
//左孩子,则现在把B,作为father_A的左孩子。否则,作为father_A的右孩子,就是用B的取代A原来的位置。
else
father_A
-
>
rchild
=
B
;
break
;
该算法的过程实现起来并不难,主要还是有人家的理论在这儿放着。详细的过程看代码注释。
2
,
RR
型。与
LL
型是对称的。(右边重,需往左边转)
RR
型的判断依据就是
:A
节点平衡因子为
-2
,
B
节点的平衡因子为
-1.
即: A->bf = -2, B->bf = -1.
如果失衡类型是RR
型,这调整算法如下:
该类型的调整和LL
型调整差不多。以
B
节点为轴,将
A
节点作逆时针旋转,然后,把
B
的
左子树给
A
,作为
A
的右子树。
算法的代码实现如下:
case
RR
:
B
=
A
-
>
rchild
;
/
/
该类型B节点所在的位置
A
-
>
rchild
=
B
-
>
lchild
;
/
/
把B的左子树给A,充当A的右子树。
B
-
>
lchild
=
A
;
/
/
将A充当B的左子树,完成了逆时针旋转。
A
-
>
bf
=
B
-
>
bf
=
0
;
/
/
重新设置平衡因子。
if
(
father_A
=
=
NULL
)
*
root
=
B
;
/
/
看原来A在整个树中的位置,现在将B取代A的位置
else
if
(
A
=
=
father_A
-
>
lchild
)
father_A
-
>
lchild
=
B
;
else
father_A
-
>
rchild
=
B
;
break
;
该类型和LL型是对称的,只要理解了其中一个,另外一个很好理解。
3
,
LR
型。(左边,右边都重,都需要转)
该类型又引入了一个特殊节点C
。该节点很好判断,和判断
B
节点一样,插入节点的
“祖先节点”那一线上,
A
的下一个是
B
,
B
的下一个就是
C
节点。
LR
型的判断依据就是
:A
节点平衡因子为
2
,
B
节点的平衡因子为
-1.
即: A->bf = 2, B->bf = -1.
如果失衡类型是LR
型,这调整算法如下:
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议