AVL 树中的额外案例
Extra Cases in AVL Trees
AVL树似乎有四种变换:左-左、左-右、右-左和右-右。但是,似乎也可能存在其他情况。我将其提交为左平衡:
左旋和右旋都不能平衡这棵树。用什么算法来平衡呢?
我认为你不能得到左平衡的情况。
因为如果你建的是左平衡的,你可能先得到左-左或左-右,然后树会旋转并保持平衡。
这里LL和LR都可以应用
50
/ \
40 55
/ \
35 45
/ \ / \
34 36 44 46
第一次左转后:
50
/ \
45 55
/ \
40 46
/ \
35 44
/ \
34 36
第二个 LR 回合后:
45
/ \
40 50
/ \ / \
35 44 46 55
/ \
34 36
这是有效的 AVL 树。注意
In an AVL tree, the heights of the two child subtrees of any node differ by at most one
你也可以做 LL 转弯:
40
/ \
35 50
/ \ / \
34 36 45 55
/\
44 46
这也是有效的 AVL 树。
AVL树似乎有四种变换:左-左、左-右、右-左和右-右。但是,似乎也可能存在其他情况。我将其提交为左平衡:
左旋和右旋都不能平衡这棵树。用什么算法来平衡呢?
我认为你不能得到左平衡的情况。 因为如果你建的是左平衡的,你可能先得到左-左或左-右,然后树会旋转并保持平衡。
这里LL和LR都可以应用
50
/ \
40 55
/ \
35 45
/ \ / \
34 36 44 46
第一次左转后:
50
/ \
45 55
/ \
40 46
/ \
35 44
/ \
34 36
第二个 LR 回合后:
45
/ \
40 50
/ \ / \
35 44 46 55
/ \
34 36
这是有效的 AVL 树。注意
In an AVL tree, the heights of the two child subtrees of any node differ by at most one
你也可以做 LL 转弯:
40
/ \
35 50
/ \ / \
34 36 45 55
/\
44 46
这也是有效的 AVL 树。