Trees
Building your tree…
Initializing Sorting Algorithms...
Sorting
Trees
Graphs
Preparing interactive visualizations...
Trees
Building your tree…
Self-balancing BST that tracks a balance factor at every node. When |bf| exceeds 1, a rotation (LL, RR, LR, or RL) restores balance.
Inserting 30 makes 10 right-heavy (bf=-2) → Left Rotate
Insert sequence: [10, 20, 30]
def insert(node, val):
# 1. Normal BST insert
if not node: return Node(val)
if val < node.val:
node.left = insert(node.left, val)
elif val > node.val:
node.right = insert(node.right, val)
else: return node # duplicate
# 2. Update height
node.h = 1 + max(height(node.left),
height(node.right))
# 3. Check balance
b = balance_factor(node)
# LL case
if b > 1 and val < node.left.val:
return rotate_right(node)
# RR case
if b < -1 and val > node.right.val:
return rotate_left(node)
# LR case
if b > 1 and val > node.left.val:
node.left = rotate_left(node.left)
return rotate_right(node)
# RL case
if b < -1 and val < node.right.val:
node.right = rotate_right(node.right)
return rotate_left(node)
return nodeWhat balance factor makes an AVL node "unbalanced"?
1/3