Here is an iterative version of the public put method (no private method used):
The correctness is not quite as clear to demonstrate as for the recursive version.
public void put(Key k, Value v) { if (root == null) { root = new Node(k,v); return; } Node p = root; while(true) { if (k.compareTo(p.key) < 0 ) { if ( p.left == null ) { p.left = new Node(k,v); return; } else p = p.left; } else if ( k.compareTo(p.key) > 0 ) { if ( p.right == null ) { p.right = new Node(k,v); return; } else p = p.right; } else { // k already in the tree, update its value p.val = v; return; } } }