cool write up and code. i have two different compilers that generate different results using this code and wonder how it could have happened. The bug being that in the rebalance_del code the check is for tree->next[dir]==NULL yet in my crash case on one compiler tree->next[1_dir] is NULL while tree->next[dir] isnt so trying to use that pointer (1-dir) obviously fails. Ever seen something like that?
