如何解决AVL树平衡
| 给定下面的AVL树: 23
/ \\
19 35
/ \\ / \\
8 20 27 40
/
38
/
36
可以只向右旋转40度吗?使它像这样:
23
/ \\
19 35
/ \\ / \\
8 20 27 38
/ \\
36 40
与左子树相比,它仍然具有-+ 1高度的AVL属性。
在答案中,它进行了两次旋转,因此上方35处的子树如下所示:
23
/ \\
19 38
/ \\ / \\
8 20 35 40
/ \\
27 36
我不知道什么时候进行两次旋转和什么时候进行一次旋转(如果它们都不违反height属性)。
解决方法
两次旋转可能是由于使用了特定的AVL算法造成的。这两个答案对我来说都像是有效的AVL树。
, 如果仅使用不平衡的AVL树(而不是添加或删除节点之前的平衡树)给出原始问题,则单次旋转是有效的答案。
如果问题在添加或删除节点之前和之后提供了AVL树,则重新平衡的算法可能会导致发生两次旋转。
, 尽管根据我使用的文献,这两个答案都是正确的:
旋转LL,RR,LR和RL有四种旋转类型。这些旋转是
其特征在于所插入节点N的最近祖先A,其节点
平衡系数变为2。
获得以下旋转类型的特征:
LL:在A的左子树的左子树中插入N
LR:将N插入A的左子树的右子树中
RR:将N插入到A的右子树的右子树中
RL:N插入到A的右子树的左子树中
根据这些规则,在您的示例中,平衡因子变为2的最近祖先是
40
,并且插入是在40
的左子树的左子树中进行的,因此您必须执行LL旋转。遵循这些规则,您的第一个答案将是选择的操作。
尽管如此,两个答案都是正确的,并且取决于您使用的算法及其遵循的规则。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。