2013-04-11 2 views
3

Я пытаюсь написать метод для поиска всех узлов двоичного дерева для переданного значения и возврата узла при его обнаружении. Я не могу заставить логику искать обе стороны дерева. Вот что я до сих пор.Поиск всех узлов двоичного дерева в Java

private Node locate(String p, Node famTree) 
{ 
    if (root == null)//If tree empty return null; 
     return null; 
    if (famTree.value.equals(p)) //If leaf contains the passed parent value the boolean becomes true. 
     return famTree; 
    if (famTree.left != null) 
     return locate(p,famTree.left); 
    else 
     return locate(p,famTree.right); 

} 

ответ

8

Вы ищете только правильное поддерево, когда левого поддерева нет. Вы также хотите выполнить поиск, когда строка не найдена в левом поддереве. Это должно сделать это:

private Node locate(String p, Node famTree) 
{ 
    Node result = null; 
    if (famTree == null) 
     return null; 
    if (famTree.value.equals(p)) 
     return famTree; 
    if (famTree.left != null) 
     result = locate(p,famTree.left); 
    if (result == null) 
     result = locate(p,famTree.right); 
    return result; 

} 
+0

Что вы изменили? почему это будет работать иначе? – CloudyMarble

+0

@TwoMore - я не просто возвращаю результат поиска левого поддерева, когда он не является «нулем». Я беру результат поиска левого поддерева и искал правильное поддерево, если оно не было найдено. –

+0

Ну, но somehen это ваш leftsubtree корень, а первый, если вернет null, я прав? – CloudyMarble

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