Моделирование узла в RangeTree
В настоящее время я реализую 2D Range Range. У меня возникли проблемы при разработке правдоподобной модели (на Java) для моего класса Node.
Узел в дереве может иметь любое из следующих значений: среднее значение, указатель правого и левого дочернего элемента, поддерево, указатель данных и / или предыдущий и следующий указатели.
Я разбил Узел на три отдельные логические части
- a) Узел с только значением midRange - у каждого узла есть midRange
- б) Узел с левой, правой и поддеревьями. Это представляет не листовой узел.
- c) Не с указателями next, prev и data. Это представляет собой листовой узел.
Я пытался применить шаблоны Composite и Decorator, но безрезультатно. Я пытался сделать:
- Узел взаимодействует со всеми возможными получателями / установщиками, а именно: getMidRange, getLeft, getRight, setLeft, setRight и т. Д.
- Наличие двух классов, реализующих интерфейс: Node2D и LinkedNode (конечный узел). Node2D сделал все, кроме сохранения ссылок на следующий и предыдущий. Пока LinkedNode сохранил только ссылки на следующий и предыдущий.
Это работает так, но я бродил, если есть лучший способ моделирования этого как набор классов?
РЕДАКТИРОВАТЬ: Range Range (краткая информация): В Range Range - все данные хранятся в узлах Leaf, и дерево всегда сбалансировано. Кроме того, все листья на одной высоте. Кроме того, листья сортируются и связываются друг с другом с помощью двусвязного списка. Наконец, что не менее важно, каждый нествольный узел имеет поддерево, которое также является деревом диапазонов, но с листьями, отсортированными по следующему атрибуту (скажем, y, если оригинальное дерево было отсортировано по x).
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;
}