Дерево, которое возвращает две вещи вместе! - PullRequest
0 голосов
/ 25 мая 2011

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

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», а код возвращает ноль !!!

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

Ответы [ 2 ]

1 голос
/ 26 мая 2011

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

return search(...);

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

1 голос
/ 26 мая 2011

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

...