У меня есть бинарное дерево, сделанное с помощью следующего конструктора:Поиск узла в дереве в Java
public Person(String name, int age, char gender, Person c1, Person c2)
где c1 является левым потомком и c2 является правильным ребенком.
Я хочу написать метод, который ищет определенное имя в пределах максимальной генерации. Например, a.depthFirstSearch(Eva, 1);
, где Eva - это имя для поиска, а 1 - максимальное количество поколений (или уровней), на которые я могу смотреть.
Вот что у меня есть: EDIT:
public Person depthFirstSearch(String name, int maxGeneration)
{
{
Person temp;
if (maxGeneration>1){
if (this.name.equals(name)){
temp=this;
return temp;
}
else{
if (child1!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
if (child2!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
}
}
return null;
}
}
Там две проблемы здесь. Я думаю, что глубина сбрасывается до 0 каждый раз, когда функция вызывает себя, поэтому я знаю, что могу либо отслеживать глубину где-то еще, либо находить альтернативу. Другая проблема, я думаю, в том, что child2 никогда не достигается, так как я возвращаюсь к child1. Я не совсем уверен, как это работает, если кто-то может это объяснить, это было бы здорово. Любые предложения по некоторым исправлениям?
Кроме того, мне сказали, что я сначала должен искать глубину поиска, а это означает сначала изучить глубину поколений. Я не совсем уверен, что это значит и насколько отличается от логики, которую я использую в своей реализации.
Пожалуйста, см отредактированный код, я до сих пор не заставить его работать .. – Snowman
@fprime: Смотрите мой обновленный ответ. – casablanca
Большое спасибо. Это сработало. Но теперь мне что-то объясняю. Почему мы, после проверки temp! = Null, вернем его сразу? Когда у нас есть temp = child1.depthFirstSearch (name, maxGeneration-1); ', сначала мы запускаем рекурсию или переходим к следующей строке, которая проверяет' (temp! = Null) '? Я не понимаю, как это работает. – Snowman