Дерево, которое возвращает две вещи вместе!

#tree #return-value #add

#дерево #возвращаемое значение #Добавить

Вопрос:

У меня есть одна странная проблема со следующим кодом. Я пишу код для поиска по дереву.

 public TreeNode<City> search(City parent, TreeNode<City> t){
    if (t.getCity().equals(parent)) {
        System.out.println("ccc");
        return t;
    }
    else if (t.hasLeftChild()){
        System.out.println("bbb");
        search(parent,t.getLeftChild());
    }
    else if(t.hasNextSibling()){
        System.out.println("aaa");
        search(parent,t.getNextSibling());
    }
    return null;
}
  

Странная вещь в том, что: предположим, что в моем дереве есть только один элемент. Затем, когда я пытаюсь добавить элемент в свое дерево, метод работает должным образом. Однако, когда есть два элемента (родительский и дочерний) и я ищу дочерний элемент, на экране выводится «ccc», а то, что возвращает код, равно нулю!!!

Я думаю, никто никогда не сталкивался с такой глупой ситуацией. Пожалуйста, помогите мне!

Комментарии:

1. Здесь недостаточно кода, чтобы разобраться в этом. Пожалуйста, укажите язык, реализацию TreeNode и то, что вы ожидаете увидеть в качестве выходных данных.

Ответ №1:

Если первый if (…) не будет удовлетворен при первом вызове search, вы не можете надеяться ни на что другое, кроме null возврата, поскольку возвращаемое значение из двух вызовов search отбрасывается.

Ответ №2:

Вы должны добавить return s, например:

 return search(...);
  

Это концепция, лежащая в основе рекурсии; вы вызываете функцию и выполняете рекурсию, но игнорируете результат рекурсивного вызова! Поскольку вы игнорируете это, код закончил обработку ваших if инструкций и продолжает возвращать null то, что вы ему сказали.