SO I want to add a new node, randomly in the left subtree or right subtree.
Using this recursion seems wasteful (system stack add a bit of overhead) plus returning the head of every subtree (line 21) is again wasteful.
Otherwise, if I decide to add value in left subtree, I must first check to see if the left subtree is nil and create it, or recurse on it. This retuning of the current subtree head saves a few lines of code, thus making code shorter.
It is quite easy but not so elegant to walk the tree with a while loop until a randomly selected branch is null and then add a new node to its parent (in the correct branch left/right previous taken. Faster but recursion is nice and often makes quite beautiful algorithms