Предположим, что у нас есть простое дерево узлов:Сравнивая узлы дерева
Node 1 0
|-Node 1.1 1
| |-Node 1.1.1 2
| |-Node 1.1.1.1 3
| |-Node 1.1.1.2 4
|-Node 1.2 5
|-Node 1.2.1 6
... etc.
Мне нужно, чтобы иметь возможность сравнить любые 2 узла своей плоской позиции в дереве. Самый простой способ - пройти дерево и назначить каждому узлу индекс (как показано выше в крайнем правом столбце), а затем сравнить индексы. Однако есть 2 недостатка:
- Для больших деревьев расчет индексов может занять много времени и нецелесообразно, если нам нужно сравнить только два узла дерева, содержащих миллионы узлов.
- После изменения дерева (вставляемые/удаленные узлы) индексы необходимо пересчитать.
Следовательно, мой вопрос: есть ли лучший подход, который позволил бы мне сравнивать узлы дерева по их положению без необходимости вычислять индексы для каждого узла?
Для вашего плоского положения вы можете использовать поиск по глубине https://en.wikipedia.org/wiki/Depth-first_search –
Поддержание на каждом узле количества узлов в поддереве. Это позволяет быстро перейти к правильному положению. – laune
Что вы пытаетесь достичь? Что будет означать, что «Node 1.1.1.2» меньше «Узла 1.2»? Как уже упоминалось, поиск по глубине может решить часть вашей реальной проблемы, но я думаю, что это не все. – Thomas