CLRS 13.2旋转

来源:互联网 发布:汤普森2016总决赛数据 编辑:程序博客网 时间:2024/06/02 01:20

13.2-1

RIGHT-ROTATE(T,x)    y = x.left    x.left = y.right    if y.right ≠ T.nil        y.right.p = x    y.p = x.p    if x.p == T.nil;        T.root = y    else if x == x.p.left            x.p.left = y    else x.p.right = y    y.right = x    x.p = y

13.2-2
一个父结点指向的右子女有一个左旋转,一个父结点指向的左子女有一个右旋转。也就是说有多少条边就有多少种可能的旋转,n 个结点有 n1 条边,因此有 n1 种可能的旋转。

13.2-3
我理解的是把图 13-2 中的右边树中的结点 x 左旋变成图 13-2 中左边的的树,因此 a 的深度减一, b 不变,c 加一。

13.2-4
首先证明可以旋转成一条单链表。对于根结点左边的孩子 x,若 x 有右孩子则左旋 x,对于根结点右边的孩子 y,若 y 有左孩子则右旋 y,最后把根结点右旋,经过最多 n1 次旋转就可以变成一根右侧伸展的链。
对于其他的任何一颗树,我们都可以旋转成一根右侧伸展的链。由可逆操作知道通过 O(n) 次旋转可以把一颗二叉搜索树转变为另外一颗二叉搜索树。

13.2-5
T1,T2 分别对应下图的左右二叉搜索树,显然 T1 不能右旋为 T2
这里写图片描述
通过右旋,T1 的右子树中的点不能成为新的根,若 T1T2 的根结点不同, 可以在 O(n) 的时间内将 T1 的根变为 T2 的根,然后递归调用根的右子树, 得 T(n)=T(n1)+O(n)T(n)=O(n2)

0 0
原创粉丝点击