二叉树的左旋和右旋

树的旋转,分为左旋和右旋,以下借助图来做形象的解释和介绍:

1.左旋(右子为轴,当前结点左旋)

如上图所示:

当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为树内任意右孩子而不是NIL[T]的结点。

左旋以pivot到y之间的链为“支轴”进行,它使y成为该孩子树新的根,而y的左孩子b则成为pivot的右孩子。

来看算法导论对此操作的算法实现(以x代替上述的pivot):

 LEFT-ROTATE(Tx)
1  y  right[x Set y.
2  right[x left[y]       Turn y's left subtree into x's right subtree.

3  p[left[y]]  x
4  p[y p[x]              Link x's parent to y.
5  if p[x] = nil[T]
6     then root[T y
7     else if x = left[p[x]]
8             then left[p[x]]  y
9             else right[p[x]]  y
10  left[y x              Put x on y's left.
11  p[x y

 

 

2.右旋

右旋与左旋差不多,再此不做详细介绍。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值