А левая куча реализации

Поэтому мне удалось получить рабочую рекурсивную версию двоичной левой кучи, используя следующий код.

public class Node<T extends Comparable<T>>
{
    public T data;
    public Node<T> left;
    public Node<T> right;
    public int npl;

    public Node()
    {
        left = null;
        right = null;
        npl = 0;
    }
}

public class Leftist<T extends Comparable<T>>
{
    public Node<T> root;

    public Leftist()
    {
          root = null;
    }

    public void insert(T element)
    {
        if (root == null)
        {
            root = new Node();
        }
        else
        {
            Leftist temp = new Leftist();
            temp.insert(element);
            Merger(temp);
        }
    }

    public T remove()
    {

        T el = root.data;
        root = Merger(root.left, root.right);

        return el;
    }

    public Node<T> Merger(Node<T> old, Node<T> newer)
    {
        if (old == null)
            return newer;

        else if (newer == null)
            return old;
        else
        {
            if (old.data.compareTo(newer.data) < 0)
            {
                Node<T> temp = old;
                old = newer;
                old = temp;
            }
        }

        if (old.right == null)
            old.right = newer;
        else
            old.right = Merger (old.right, newer);

        if (old.left == null || old.right.npl > old.left.npl)
        {
            Node<T> temp = old.right;
            old.right = old.left;
            old.left = temp; 
        }

        if (old.right == null)
            old.npl = 0;
        else
            old.npl = old.right.npl + 1;

        return old;
    }
}

Мне было интересно, может ли кто-нибудь из вас помочь мне разобраться в логике и скорректировать код для версии левой кучи с d-кучей, которая является левой кучей с n количеством дочерних узлов.

Любая помощь будет искренне оценена.

0 ответов

Другие вопросы по тегам