Exemple #1
0
        protected new BinaryNode <T> Remove(T x, BinaryNode <T> root)
        {
            SizedBinaryNode newRoot = (SizedBinaryNode)root;

            if (newRoot == null)
            {
                throw new ArgumentNullException();
            }
            if (x.CompareTo(newRoot.Element) < 0)
            {
                newRoot.Left = Remove(x, newRoot.Left);
            }
            else if (x.CompareTo(newRoot.Element) > 0)
            {
                newRoot.Right = Remove(x, newRoot.Right);
            }
            else if (newRoot.Left != null && newRoot.Right != null)
            {
                newRoot.Element = FindMin(newRoot.Right).Element;
                newRoot.Right   = RemoveMin(newRoot.Right);
            }
            else
            {
                return((newRoot != null) ? newRoot.Left : newRoot.Right);
            }

            newRoot.Size--;
            return(newRoot);
        }
Exemple #2
0
        protected new BinaryNode <T> RemoveMin(BinaryNode <T> root)
        {
            SizedBinaryNode newRoot = (SizedBinaryNode)root;

            if (newRoot == null)
            {
                throw new ArgumentNullException();
            }
            if (newRoot.Left == null)
            {
                return(newRoot.Right);
            }

            newRoot.Left = RemoveMin(newRoot);
            newRoot.Size--;
            return(newRoot);
        }
Exemple #3
0
        protected new BinaryNode <T> Insert(T x, BinaryNode <T> root)
        {
            SizedBinaryNode newRoot = (SizedBinaryNode)root;

            if (newRoot == null)
            {
                newRoot = new SizedBinaryNode(x);
            }
            else if (x.CompareTo(newRoot.Element) < 0)
            {
                return(Insert(x, newRoot.Left));
            }
            else if (x.CompareTo(newRoot.Element) > 0)
            {
                return(Insert(x, newRoot.Right));
            }
            else
            {
                throw new DuplicateWaitObjectException($"While inserting {root.ToString()}");
            }
            newRoot.Size++;
            return(newRoot);
        }