private InnerTree findKthLargestNode() { int counter = k; InnerTree walker = root; while (walker != null && counter > 0) { int pos = (walker.right == null ? 1 : walker.right.count + 1); if (counter == pos) { break; } else if (counter > pos) { counter -= pos; walker = walker.left; } else { walker = walker.right; } } return(walker); }
public int Add(int val) { if (root == null) { root = new InnerTree(val); } else { InnerTree walker = root; while (walker != null) { walker.count++; if (val < walker.val) { if (walker.left != null) { walker = walker.left; } else { walker.left = new InnerTree(val); break; } } else { if (walker.right != null) { walker = walker.right; } else { walker.right = new InnerTree(val); break; } } } } if (!isInitialized) { return(-1); } InnerTree kNode = findKthLargestNode(); return(kNode.val); }