Example #1
0
        private node <T> insert(node <T> temp, node <T> New)
        {
            if (temp == null)
            {
                return(New);
            }
            if (temp < New)
            {
                temp.right = insert(temp.right, New);
                if (temp.right.value() > temp.value())
                {
                    temp.left_rotation(ref temp);
                }
            }
            else if (temp > New)
            {
                temp.left = insert(temp.left, New);
                if (temp.left.value() > temp.value())
                {
                    temp.right_rotation(ref temp);
                }
            }

            return(temp);
        }
Example #2
0
        private node <T> delete(node <T> Root, node <T> temp)
        {
            if (Root == null)
            {
                return(Root);
            }
            if (Root.equal(temp))
            {
                if (Root.right == null) // have one child
                {
                    Root = Root.left;
                }
                else if (Root.left == null) // have one child
                {
                    Root = Root.right;
                }
                else  // have two children
                {
                    if (Root.right.value() > Root.left.value())
                    {
                        Root.left_rotation(ref Root);

                        Root.left = delete(Root.left, temp);
                    }

                    else
                    {
                        Root.right_rotation(ref Root);
                        Root.right = delete(Root.right, temp);
                    }
                }
            }
            else if (Root < temp)
            {
                Root.right = delete(Root.right, temp);
            }
            else
            {
                Root.left = delete(Root.left, temp);
            }
            return(Root);
        }