我有以下AVL树:
10
/ \
5 12
/ \ / \
2 8 11 13
/ \ /\
1 4 7 9
如果我插入3,那么我得到:
10
/ \
5 12
/ \ / \
2 8 11 13
/ \ /\
1 4 7 9
/
3
如果我计算每个节点的平衡因子,似乎每个BF都有效: (节点:BF) - > 10:1,5:0,2:-1,1:0,4:-1,8:0,7:0,9:0,3:0,12:0,11:0,13:0 但显然这棵树需要重新平衡。哪里有无效的BF,那么如何进行必要的旋转。
答案 0 :(得分:1)
10应该有一个平衡因子2,它的左子树5-2-4-3和右子树12-13。单次旋转后的有效树可能看起来像5 | 2 10 | 1 4 8 12 | nil nil 3 nil 7 9 11 13。
重新平衡的一种可能方法是cut-link-algorithm: 1.命名不平衡节点z,其中一个是孩子的y,另一个是孩子的孩子x。 2.在inorder-traversal中将节点重命名为a,b,c,并让它们的子节点从左到右为T0,T1,T2和T3。 3.将b设置为新的根,将a设置为其左子,将c设置为其右子。 4.将从左到右对应的四个子树附加为T0,T1,T2和T3。