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