Моделирование узла в RangeTree

В настоящее время я реализую 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 (краткая информация): В Range Range - все данные хранятся в узлах Leaf, и дерево всегда сбалансировано. Кроме того, все листья на одной высоте. Кроме того, листья сортируются и связываются друг с другом с помощью двусвязного списка. Наконец, что не менее важно, каждый нествольный узел имеет поддерево, которое также является деревом диапазонов, но с листьями, отсортированными по следующему атрибуту (скажем, y, если оригинальное дерево было отсортировано по x).

RangeTreeBreakdown

1 ответ

Решение
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;
}
Другие вопросы по тегам