Как найти узел в дереве по заданному пути
У меня есть TreeModel в Java, и мне дали путь, чтобы найти, чтобы проверить, существует ли путь. Например, /dir1/dir2/dir3/ - это существующий путь в моем дереве. Мое дерево не двоичное. Как бы я подошел к этому? Моя идея состояла в том, чтобы функция взяла DefaultMutableTreeNode, а затем проверила, имеет ли узел то же имя, что и первый каталог в моем пути, и так далее для остальных каталогов. Моя проблема заключается в том, как рекурсивно перейти к следующей строке и следующему узлу. Должна ли моя функция быть рекурсивной, итеративной и т. Д. Любая помощь будет отличной! Заранее спасибо.
2 ответа
Предполагая, что у вас есть типичное дерево, где каждый элемент вашего пути является ключом к следующему узлу, что-то вроде этого должно работать при вызове на корневом узле:
public boolean hasPath(String path) {
Node node = this;
for (String key : path.split("/")) {
node = node.get(key);
if (node == null)
return false;
}
return true;
}
Это итеративно и поэтому легче понять, чем идти по кроличьей норе рекурсии. Это также более эффективно.
Вы можете сделать это Сохранить и обработать все дочерние узлы из корня в стек. Затем начните извлекать каждый дочерний узел и делать то же самое с ним рекурсивно.