2016-10-20 3 views
2

Я пытаюсь найти узел в небиновом дереве без фактического прохождения узла к методу поиска.Рекурсивный поиск по дереву без объекта передачи

Каждый узел имеет переменную name. Метод findChild() принимает имя и выполняет поиск по дереву, в котором он был вызван, чтобы найти узел с этим именем.

Чтобы выполнить рекурсивный поиск, я вызываю findChild() на дочернем узле, а не передавая дочерний узел методу findChild(). Операторы печати показывают мне, что метод проходит через дерево, но переменная result получает значение null, когда стек отключается, поэтому метод всегда возвращает значение null. Я понимаю, почему это делается, но я не понимаю, как отключить этот тип рекурсии. Любая помощь приветствуется!

Мой findChild() метод:

public FileNode findChild(String name) { 
    FileNode result = null; 
     for (FileNode child : this.getChildren()) { 
      if (child.getName() == name) { 
       return child; 
      } else { 
       child.findChild(name); 
      } 
     } 
    return result; 
} 
+0

Прежде всего, вы должны всегда использовать '.equals' для сравнения строк вместо' == '. '==' будет проверять, является ли тот же объект ссылкой, в то время как '.equals' проверяет, одинаковы ли строки. – Erik

ответ

0

Будет ли следующее небольшое изменение в помощи? Условие else еще никогда не присваивает значение.

public FileNode findChild(String name) { 
    FileNode result = null; 
     for (FileNode child : this.getChildren()) { 
      if (child.getName() == name) { 
       result = child; 
       break; 
      } else { 
       result = child.findChild(name); 
       if (result != null) 
        break; 
      } 
     } 
    return result; 
} 
1

Вы выбрасывая результат FileNode#findChild в else блоке

Попробуйте

if (child.getName().equals(name)) { 
    return child; 
} else { 
    FileNode childResult = child.findChild(name); 
    if (childResult != null) { 
     return childResult; 
    } 
} 
Смежные вопросы