Esempio n. 1
0
    // Suppose t != null.
    void RemoveTarget(TreapNode <T> t)
    {
        if (t.TypedLeft == null || t.TypedRight == null)
        {
            var c = t.TypedLeft ?? t.TypedRight;

            if (t.TypedParent == null)
            {
                Root = c;
            }
            else if (t.TypedParent.TypedLeft == t)
            {
                t.TypedParent.TypedLeft = c;
            }
            else
            {
                t.TypedParent.TypedRight = c;
            }

            RemovePriority(t.Priority);
        }
        else
        {
            var t2 = t.SearchNextNode() as TreapNode <T>;
            t.Key = t2.Key;
            RemoveTarget(t2);
        }
    }