Моделирование узла в RangeTree - PullRequest
5 голосов
/ 12 февраля 2011

В настоящее время я реализую 2D Range Range.У меня возникают проблемы при создании вероятной модели (на Java) для моего класса Node.

Узел в дереве может иметь любое из следующих значений: значение среднего уровня, указатель правого и левого дочернего элемента, поддерево, указатель данныхи / или предыдущий и следующий указатели.

Я разбил узел на три отдельные логические части

  • a) Узел со значением только midRange - у каждого узла есть midRange
  • б) Узел с левой, правой и поддеревьями.Это представляет собой неконечный узел.
  • c) Не с указателями next, prev и data.Это представляет собой листовой узел.

Я пытался применить шаблоны Composite и Decorator, но безрезультатно.Я попытался сделать:

  1. Интерфейс узла со всеми возможными методами получения / установки, то есть: getMidRange, getLeft, getRight, setLeft, setRight и т.д ...
  2. Наличие двух классов для реализацииинтерфейс: Node2D и LinkedNode (конечный узел).Node2D сделал все, кроме сохранения ссылок на следующий и предыдущий.Хотя LinkedNode сохранил ссылки только на следующий и предыдущий.

Это работает так, но я бродил, если есть более хороший способ моделирования этого как набора классов?

РЕДАКТИРОВАТЬ: Range Range (краткая информация): В деревьях диапазона - все данные хранятся в узлах Leaf, и дерево всегда сбалансировано.Кроме того, все листья на одной высоте.Кроме того, листья сортируются и связываются друг с другом с помощью двусвязного списка.И наконец, что не менее важно, каждый нествольный узел имеет поддерево, которое также является деревом диапазонов, но с листьями, отсортированными по следующему атрибуту (скажем, y , если исходное дерево было отсортировано по x ).

RangeTreeBreakdown

1 Ответ

1 голос
/ 13 февраля 2011
abstract class AbstractNode {
    int midRange;
}

class InnerNode extends AbstractNode {
    AbstractNode left;
    AbstractNode right;
    AbstractNode subtree;
}

class LeafNode extends AbstractNode {
    LeafNode next;
    LeafNode prev;
    Object data;
}
...