ALV树与树的平衡

ALV树,是指带有平衡条件的二叉查找树。这个平衡条件,就是左子树和右子树的高度差的绝对值小于等于1.
然而,在对ALV树进行插入结点时,就有可能破坏了这种平衡。于是,为了使被破坏平衡的AVL树恢复平衡,就需要对这棵树进行旋转。根据实际,可以分为四种情况:
情况1:在树B的左子树(L)的左子树(L)的位置上插入节点E(即LL)
插入后:
在这里插入图片描述
在树B的左子树的左子树的位置上插入节点E后,树A的左子树高度为3,右子树高度为1,因此树A是不平衡的。将导致树A不平衡的左子树B-D-E拿出来进行右旋转。(LL则右旋转)。右旋转以中间结点为中心,对右上轴右旋转(用右手)120度。
提取不平衡的结点右旋转:
在这里插入图片描述
经过旋转后的树:
在这里插入图片描述
情况2:在树C的右子树(R)的右子树(R)的位置上插入节点E(即RR)
插入后:
在这里插入图片描述
在树C的右子树的右子树的位置上插入节点E后,树A的左子树高度为1,右子树高度为2,因此树A是不平衡的。将导致树A不平衡的左子树C-D-E拿出来进行左旋转。(RR则左旋转)。左旋转以中间结点为中心,对左上轴左旋转(用左手)120度。
提取不平衡的结点左旋转:
在这里插入图片描述
经过旋转后的树:
在这里插入图片描述
情况3:在树B的左子树(L)的右子树(R)的位置上插入节点E(即LR)
插入后:
在这里插入图片描述
在树B的左子树的右子树的位置上插入节点E后,树A的左子树高度为3,右子树高度为1,因此树A是不平衡的。将导致树A不平衡的左子树B-D-E拿出来进行左右旋转。(LR则左右旋转)。左旋转以下面结点为中心,对左上轴左旋转(用左手)120度,这样D和B间的连线就断了,把E和B接上;右旋转以中间结点为中心,对右上轴右旋转(用右手)旋转120度。
提取不平衡的结点左右旋转:
在这里插入图片描述
经过旋转后的树:
在这里插入图片描述
情况3:在树B的右子树(R)的左子树(L)的位置上插入节点E(即RL)
插入后:
在这里插入图片描述
在树C的右子树的左子树的位置上插入节点E后,树A的左子树高度为1,右子树高度为3,因此树A是不平衡的。将导致树A不平衡的左子树C-D-E拿出来进行右左旋转。(RL则右左旋转)。右旋转以下面结点为中心,对右上轴右旋转(用右手)120度,这样C和D间的连线就断了,把E和C接上;右旋转以中间结点为中心,对左上轴左旋转(用左手)旋转120度。
提取不平衡的结点右左旋转:
在这里插入图片描述
经过旋转后的树:
在这里插入图片描述
代码后面补上

猜你喜欢

转载自blog.csdn.net/qq_31729917/article/details/82948180