2015-03-30 2 views
1

Итак, я создаю двоичное дерево поиска, и одним из методов, который мне нужно сделать, является метод извлечения, который находит определенное значение и возвращает его. Вот метод (я не проверял еще, так что я не уверен, если это право)Как вызвать метод извлечения в BST

protected TreeNode retrieveItem(TreeNode r, String word) { 
    if (r == null){ 
     return null; 
    } 
    if (word.compareTo(r.item.getWord()) < 0){ 
     return retrieveItem(r.left, word); 
    } else if (word.compareTo(r.item.getWord()) > 0){ 
     return retrieveItem(r.right, word); 
    } 
    return r; 
} 

Поскольку это защищенный метод, он должен быть вызван из открытого метода. Обычно называть эти методы, которые я бы сделать что-то вроде

public void delete(String word) { 
    root = deleteItem(root, word); 
} 

Который называет метод удаления, используя корень (который уже объявившего) и слово. Проблема с вызовом метода извлечения является то, что метод выглядит следующим образом

public WordRefs retrieve(String word) { 
    return null; 
} 

Это говорит возвращать нуль, потому что я не знаю, что возвращаемое значение должно быть, и я не уверен, что я должен сделать называть его. Итак, как я могу назвать этот метод?

Вот класс WordRefs:

import java.util.LinkedList; 

public class WordRefs { 
    private String word; 
    private LinkedList<Integer> lineNumbers; 


    public WordRefs(String word) { 
     this.word = word; 
     lineNumbers = new LinkedList<>(); 
    } 


    public void addLine(int lineNumber) { 
     lineNumbers.add(lineNumber); 
    } 


    public String getWord() { 
     return word; 
    } 


    public LinkedList<Integer> getLineNumbers() { 
     return lineNumbers; 
    } 


    public String toString() { 
     String result = word + ":"; 

     for (Integer ii : lineNumbers) { 
      result += " " + ii; 
     } 

     return result; 
    } 
} 
+0

Поскольку 'retrieveItem()' возвращает 'TreeNode', не должен' retrieve() 'возвращать' TreeNode' также? Возвращение одного и того же слова будет бессмысленным, и возврат 'boolean', указывающий, было ли обнаружено слово' word', будет иметь смысл только в том случае, если это метод 'contains()' like. –

+0

На самом деле предполагается, что WordRefs вернет не TreeNode, но будет ли опубликовать весь класс, чтобы выяснить, что происходит? –

ответ

0

Учитывая WordRefs класс, я думаю, что-то, как это должно работать:

public WordRefs retrieve(String word) { 
    TreeNode node = retrieveItem(root, word); 
    if (node == null) { 
     return null; 
    } else { 
     return new WordRefs(node.item.word); 
    } 
} 

Если node.item содержит какую-либо информацию о lineNumber вы можете добавить, что, прежде чем вернуться WordRefs объект.

+0

Одна проблема с этим кодом. Word имеет только частный доступ в классе WordRefs, но я просто исправил его, добавив метод getWord(), чтобы найти слово. Я еще не тестировал его, но предполагаю, что getWord() должен работать. –

+0

Хорошо, дайте мне знать, если это поможет. –

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