2015-11-29 4 views
0

Я пытаюсь реализовать метод префикса поиска для моей программы-словаря. Он ищет двоичное дерево поиска для префикса-eg. «t» или «th» для «the». На данный момент он всегда возвращает false. То, что так запутанно, заключается в том, что у меня есть очень похожий метод для поиска целых слов, и это работает отлично. Этот метод также использует очень похожие методы для обычных методов BST. Любые рекомендации были бы весьма признательны.метод префикса поиска для дерева двоичного поиска

private boolean recContainsPrefix(String prefixKey, BSTNode<String> tree){ 
    //base case 
    if(tree==null) 

    return false; 
    //test if each node starts with the prefix. 
    if(tree.getInfo().startsWith(prefixKey)){ 
     return true; 
    } 
    //recursive case. 
    else if(prefixKey.compareTo(tree.getInfo())<0) 
     return recContainsPrefix(prefixKey, tree.getLeft()); 
    //recursive case. 
    else if(prefixKey.compareTo(tree.getInfo())>0) 
     return recContainsPrefix(prefixKey, tree.getRight()); 

    else{ 
     return true; 
    } 
}  
+0

Попробуйте 'если (дерево == NULL) {return false;} 'вместо этого, потому что я думаю, что пустая строка в выражении if влияет на поток кода. – DrOverbuild

+0

Большое спасибо за предложение! однако это не работает. – drt

+0

Извините, если это звучит глупо, но вы можете показать, что возвращает getInfo() для узла в дереве. Поскольку я сомневаюсь в сравнении 'if (tree.getInfo(). StartWith (prefixKey)) { return true; } ', для которого, если я иду сверху вниз, строка никогда не будет удовлетворена. Как 't' никогда не начинался с 'th' ... 'th' никогда не начинался с 'the' ... – nullpointer

ответ

0

С его помощью рекурсии условие хвост никогда не встречались в bottom up recursion для

if(tree.getInfo().startsWith(prefixKey)) 
{ 
    return true; 
    } 

Если да обратное условие для:

if(prefixKey.startsWith(tree.getInfo())) 
    { 
     return true; 
     } 
+0

спасибо! Вы знаете какой-либо способ исправить эту проблему? – drt

+0

@drt: отредактировано решение – nullpointer

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