Я предполагаю, что вы хотите найти узел с определенной строкой, верно?Другие ответы объясняют способы сделать это, используя подход перечисления ... (и я уверен, что все они знают, что в реальном мире вам также придется учитывать возможность наличия более чем одного узла с искомой строкой,и т.д.)
Но есть и другие, более сексуальные способы сделать это.Например, если вы поместите все узлы в collection
некоторого вида (ArrayList
и т. Д.), Как они были вставлены в дерево (и удалили их, как они были удалены, включая явное удаление всех их потомков) ..и если вы также реализовали вещи так, чтобы два узла считались «равными», если они имели одинаковый результат из toString
(или реализовали Comparator
, который это сделал), то вы могли бы легко вынуть фактический узел (или узлы)) в ArrayList
, которые совпадают, а затем идут
tree.expandPath( new TreePath( node_found.getPath())
Одна из точек деревьев заключается в том, что на самом деле это путь к узлу (иногда называемый «сухарями»)) которая является реальной "идентичностью" любого данного узла.С точки зрения отображаемых значений String
это означает, что вы можете иметь в одном и том же дереве:
путь: «Питер» - «Пайпер» - «маринованный» - «перец»
путь: «Кулинарный»specialties "-" специи "-" перец "
путь:" Мои любимые "-" еда "-" приправы "-" перец "
И так сказать, вы хотите найти, изатем выберите или выделите один из этих "перцевых" узлов ... на самом деле не очень эффективно использовать подход перечисления "грубой силы" для каждого из элементов этого пути (чем больше дерево, тем хуже проблема, конечно,).
Используя мое предложение, это становится довольно просто: просто разделите путь «хлебных крошек», начиная с корня или где угодно, а затем, когда вы углубитесь в дерево, используйте node.isNodeDescendant()
на "более высокие "узлы" (то есть те, которые находятся дальше от корня), которые вы уже нашли (здесь, 3 "перцовых" узла): если вы хотите первый путь выше, вы сначала найдете узел "Питер", а затем сразу после этогоединственный "перцовый" узел, который мог бы удовлетворить isNodeDescendant
test даст весь путь, который вы ищете.
* Конечно, некоторая форма хеширования будет еще более эффективной.Но это соображение, только если у вас есть много тысяч или более узлов в вашем дереве.