我正在尝试旋转一棵树以保持其平衡,但是在此示例中我遇到了困难。我不太确定自己在做什么错。
我在节点30处有L / R高度差为1的树下面。所以,我猜想这棵树是平衡的。
30
/ \
20 60
/ \
10 25
我在这里添加22,这就是添加22之后的结果。
30
/ \
20 60
/ \
10 25
/
22
在节点20上,L / R高度差为1,但在节点30上,L / R高度差为2。因此,我想它不再平衡了。我试图向右旋转树以使其平衡,但是我正在树下。
20
/ \
10 30
/ \
25 60
/
22
旋转后,节点20的L / R高度差仍为2。
我在哪里做错了?可以通过旋转来平衡这棵树吗?
我可以使用如下所示的排序数组方法来平衡树,但是在这个示例中,我对旋转平衡确实感到困惑。
22 25
/ \ / \
20 30 20 30
/ / \ / \ \
10 25 60 10 22 60
我在这里做什么错了?
非常感谢!
答案 0 :(得分:3)
这种情况下需要两次旋转:将25向上旋转两次。我假设您正在考虑AVL树,但是在某些情况下,所有标准平衡二叉树都需要两次旋转。
答案 1 :(得分:3)
AVL树中基本上有四种旋转类型。
在您的情况下,左向右应该适用。
在这里您需要执行两个步骤。
1:-从20个节点向左旋转。因此,您的树应如下所示。
30
/ \
25 60
/
20
/ \
10 22
2:-从30个节点向右旋转。所以你的树应该像下面这样。
25
/ \
20 30
/ \ \
10 22 60
您可以参考N网站来了解其行为。这是最好的link
之一