2016-06-21 9 views
-4

У меня возник вопрос о методе, который должен найти узел в двоичном дереве, который содержит заданный value. Метод, приведенный ниже, не работает, и возникает вопрос.Поиск узла в двоичном дереве

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    if(node.left != null) search(node.left, value); 
    if(node.right != null) search(node.right, value); 
    return null; 
} 

Проблема заключается в том, что этот метод иногда возвращает null, когда на самом деле является узлом с дерева данной value. Почему это?

+0

Недостаточно кода для определения. Почему ваше двоичное дерево не использует дженерики? Было бы более полезно, если бы вы могли хранить любой ссылочный тип. – duffymo

ответ

5

Вы не должны игнорировать значение, возвращаемое рекурсивного вызова, и ваш метод не следует использовать root, но прошло node:

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    Node found = null; 
    if(node.left != null) 
     found = search(node.left, value); 
    if(found == null && node.right != null) 
     found = search(node.right, value); 
    return found; 
} 
0

Как Эран сказал, ваши звонки искать через if заявления Арен 't возвращает узел, так как предполагается ваша функция search. Единственная ситуация, в которой работает ваш текущий код, - это то, что первый узел n удовлетворяет n.value == value.

Смежные вопросы