This file has some notes on AVL tree rebalancing. Those familiar with AVL tree rebalancing probably do not need to bother reading it. The case numbers here appear in comments in arena_rebalance() in user.c. Rebalance case 1: | p (-2) v-------------/ \----------v A (-1) B v-------/ \--v / \ C f ----- / \ / \ / \ ----- ------- becomes | A (0) v---------------/ \------------v C p (0) / \ v-------/ \--v / \ f B ------- / \ / \ ----- ----- and | p (-2) v-------------/ \----------v A (0) B v-------/ \--v / \ C f ----- / \ / \ / \ / \ ------- ------- becomes | A (1) v---------------/ \-------------v C p (-1) / \ v-------/ \--v / \ f B ------- / \ / \ / \ ----- ------- Rebalance case 2: | p (-2) v-------------/ \----------v A (1) B v-------/ \----v / \ C f (?) / \ / \ v----/ \----v ------- / \ b c ------- / \ / \ --- \ --- \ --- --- becomes | f (0) v---------/ \---------v A (-1/0) p (0/1) v-------/ \---v v---/ \----v C b c B / \ / \ / \ / \ / \ --- \ --- \ / \ ------- --- --- ------- Case 3 is just like case 1 but with left and right swapped and all balance figures negated; likewise for case 4 and case 2.