2014-01-25 2 views
0

Я пытаюсь подсчитать узлы в BST, однако retval не увеличивается. Через отладку я вижу, что каждый узел посещается, но я не уверен, почему он не увеличивается. Я знаю, что у меня есть 3 узлов в дереве и он возвращает 0 ...BST Не увеличивая количество узлов в Java

public int countNodes(){ 
    if (root == null) 
     throw new NullPointerException(); 
    return countNodes(root); 
} 
private int countNodes(LNode ptr){  
    int retval = 1; 
    if (root != null && ptr.right == null && ptr.left == null) 
     return retval = 1; 
    else 
     retval = countNodes(ptr.right) + countNodes(ptr.left) + 1; 
    return retval; 
} 

Я также попытался не используя retval провести подсчет:

private in countNodes(LNode ptr){ 
    if (root != null && ptr.right == null && ptr.left == null) 
     return 1; 
    else 
     return= countNodes(ptr.right) + countNodes(ptr.left) + 1;  
} 
+1

Пожалуйста, создайте [минимальный тестовый пример] (http://sscce.org), который показывает, что он возвращает 0. –

ответ

3

Это более точная и актуальная :

private int countNodes(LNode ptr){  
    if (ptr == null) 
     return 0; 
    return 1 + countNodes(ptr.left) + countNodes(ptr.right); 
} 
+0

Спасибо, что сработало! Он говорит, что я должен ждать 8 минут. отметить его, хотя. – Chris

+0

@ChristopherDay, проблем нет. –

1

Синтаксис «return x = y» неверен. Вы имеете в виду «return retval» или «return countNodes (ptr.right) + countNodes (ptr.left) + 1; ', в отличие от« return retval = 1 ».

Это, как говорится, ответ орел - правильный способ сделать это.

Редактировать: Я стою исправлено. Удаление неправильного объяснения. Но исправьте синтаксис.

+2

Я не уверен, что это объясняет, как получается 0. В 'return retval = 1;', 'retval = 1' оценивается как' 1', что затем возвращается. –

+1

Результат оператора присваивания не равен 0. ["Во время выполнения результат выражения присваивания является значением переменной после того, как произошло присвоение."] (Http://docs.oracle.com/javase/ функции/JLS/SE7/html/JLS-15.html # ПСБ-15.26) – Radiodef

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