Джава. Получить поддерево по родительскому узлу - PullRequest
2 голосов
/ 16 января 2012

У меня есть дерево со следующей спецификацией узла:

java.util.TreeMap<Long id, java.util.TreeMap children>

Когда я заполняю эту карту, я хочу добавить поддерево только по id.

например. Дерево это:

     /-4
   /-2
1 <    /-5
   \-3<
       \-6

И когда я использую свой код для ID = 3, я хотел бы вернуть только TreeMap с parentNode = 3

Спасибо за совет

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Вам нужен алгоритм поиска деревьев. Это легко с рекурсией. Вы должны найти всех дочерних элементов в корневом узле и вызывать один и тот же метод для каждого из них, пока не найдете нужный вам узел с идентификатором и не вернете его.
Здесь и здесь вы можете найти примеры. Разница в том, что вы используете карту, но это не имеет значения. Идея такая же.

1 голос
/ 16 января 2012

Вам нужно только это поддерево?Или все узлы больше 3?Цель TreeMap - иметь отсортированную карту по ключу, NOT , чтобы использовать ее в качестве временной структуры данных дерева.Он поддерживается даже не двоичным деревом поиска, а красно-черным деревом.

Чтобы получить все узлы с ключом, большим или равным данному ключу, вы можете использовать TreeMap.TailMap .

0 голосов
/ 16 января 2012

В общем, если ваше дерево не является двоичным деревом поиска, вы должны рекурсивно исследовать дерево (сначала в глубину, либо в ширину) и возвращать узел с идентификатором, равным требуемому значению.

Я согласен, что TreeMap, вероятно, не лучший способ реализовать двоичное дерево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...