Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }