AVL 树中 最复杂的一种旋转情况:LR 型(左-右)冲突,而这段代码:
if (balance > 1 && getBalance(root->left) < 0) {
root->left = rotateLeft(root->left); // 对左孩子先左旋
return rotateRight(root); // 再对自己右旋
}
确实 容易误解,尤其是为什么是 root->left = rotateLeft(...)
而不是 root->right = ...
。我们这就从最底层 带图详解!
解释以下三点:
什么是 LR 型冲突?
为什么需要“先左后右”双旋?
为什么是 root->left = ...
而不是 root->right = ...
?