По мотивам: Прикрутить список к элементам уже содержащим ссылки на соседей?
У меня предполагается структура данных, которую можно визуально представить так:
root
|
-> a
|
-> b -> c -> d
| |
| -> h -> i -> j -> k
|
-> e -> f -> g
Каким образом я могу обеспечить удобный доступ из любого узла в любой другой узел?
Мыслю так, на примере «a»:
Добавить в список только потомков «b» и «e», а так же указать этим «b» и «e» что их родитель это «a».
Затем, «скрепить» соседей «b» и «c» и соседей «c» и «d», указав для «c» и «d», что их родитель тоже «a».
Повторить процедуру скрепления соседей для «e» как для «b».
Повторить процедуру для «c» как для «a».
Таким образом, смотря на любой узел, если левый сосед NULL, значит этот узел в списке родителя, если правый сосед NULL, значит узел в конце «отростка», если список потомков не пуст, то можно провалиться глубже, ну и у каждого узла есть указатель на родителя для подъёма вверх.
Всё ли я предусмотрел? Насколько сложно будет этим разруливать при добавлении, удалении, перемещении узлов? Есть ли более подходящие варианты взаимосвязей для такой структуры данных?