2014-02-18 4 views
-1

У меня есть этот код, где я пытаюсь напечатать большие числа двоичного дерева поиска. Например, когда я вызываю больший метод больше (5), а мое дерево двоичного поиска имеет значения 1,2,3,4,5,6,7,8,9,10 Я хочу вернуть более высокие значения из 5, поэтому результатом будет 6,7,8,9,10. Но у моего кода есть проблема, и я не знаю, где проблема. Система должна быть возвращена. Он работает с системой.Вернуть большие числа в двоичном дереве поиска в java

private int greater(BTNode<Integer> n,int nu) 
{ int o=0; 
    int leftAns = 0; 
    if (n.left != null) 
     leftAns = greaterInt(n.left, nu); 
    int rightAns = 0; 
    if (n.right != null) 
     rightAns = greaterInt(n.right, nu); 
    int answer = leftAns + rightAns; 

    if (n.data.intValue() > nu){ 
     o+=n.data; 
     System.out.println(n.data); 
     //System.out.println(answer); 
    } 

    return o; 
} 
public int greater(int n) 
{ if (root == null) 
    return 0; 
else 
    return greaterInt(root,n); 
} 
+1

Для начала, ваш метод возвращает 'int', пока он кажется, что вы хотите вернуть более одного значения, поэтому вам, вероятно, понадобится 'Collection ' как возвращаемое значение (или одно, если его реализация) – amit

+0

Я не могу использовать Collection. Я должен многократно вызывать метод в общедоступном методе и просто печатать значения один под другим. Например, 6/n 7/n 8/n (n = новая строка) – user3310040

+0

Хорошо, а что не работает? – amit

ответ

0
T max = null; 

if(rootNode.getRightChild() == null){ 

max = rootNode.getData(); 

} 

else{ 

maxItem(rootNode.getRightChild()); 

} 

return max; 
+0

что такое T? могу ли я использовать int вместо этого? – user3310040

+0

Не работает :( – user3310040

1

Вы больше значения не только один; так что просто добавить эти значения в списке

private void greater(BTNode<Integer> n, int nu, List<Integer> integers) { 
    if (n.left != null) 
     greaterInt(n.left, nu); 
    if (n.right != null) 
     greaterInt(n.right, nu); 
    if (n.data.intValue() > nu) { 
     //System.out.println(n.data); 
     //System.out.println(answer); 
     integers.add(n.data); 
    } 
} 

public List<Integer> greater(int n) { 
    if (root == null) 
     return Collections.EMPTY_LIST; 
    List<Integer> ar = new ArrayList<>(); 
    greaterInt(root, n, ar); 
    return ar; 
} 

Если вы хотите, сумма элементов больше, чем п, как ваш источник выглядит следующим образом:

private int sum(BTNode<Integer> n, int nu) { 
    int leftAns = 0; 
    int rightAns = 0; 

    if (n.left != null) 
     leftAns = greaterInt(n.left, nu); 
    if (n.right != null) 
     rightAns = greaterInt(n.right, nu); 
    if (n.data.intValue() > nu) { 
     //System.out.println(n.data); 
     //System.out.println(answer); 
     return leftAns + rightAns + n.data; 
    } 
    return leftAns + rightAns; 

} 

public int sum(int n) { 
    if (root == null) 
     return 0; 
    else { 
     return sum(root, n); 
    } 
} 
+0

вы можете сделать и nth (int n) метод, где возвращается элемент, который находится в этой позиции? (N позиция) – user3310040

+0

@ user3310040, вероятно, я могу, но это другой вопрос – user1121883

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