2016-12-04 3 views
1

У меня есть двоичное дерево поиска и вы хотите найти узел с указанным значением. Это мой код для этого, но я получаю ошибку переполнения стека. Надеюсь, кто-то скажет мне, почему. Мой код:У меня есть ошибка переполнения стека здесь, но я не знаю, почему

public TreeNode findNodebyKey2(int val) { 
    if (val == key) { 
     return this; 
    } else if (val < key) { 
      return this.left.findNodebyKey2(val); 
    } else if(val > key){ 
      return this.right.findNodebyKey2(val); 
    } 
    return this; 
} 
+0

отладки вашей программы. условие 'val == key' никогда не выполняется, и у вас заканчиваются кадры стека. – TheLostMind

+0

. Вы используете рекурсивные вызовы, которые приводят к ошибке переполнения стека. Потому что всякий раз, когда метод называется стеком, будет выделен стек для выполнения операции. – Shriram

+0

1. Проверьте, правильно ли вставлены данные слева и справа. Он ТОЛЬКО работает, если дерево правильное. 2. Я также вижу исключение NullPointerException, когда слева или справа отсутствует (что должно быть у листьев в случае отсутствия соответствия). 3. вернуть это никогда не будет достигнуто, удалите это. 4. Если 1, 2 являются правильными, StackOverflow должен быть только в том случае, когда данные огромны или превышают память. – abksrv

ответ

0

В коде вы в курсе, вы можете получить StackOverflowException только в 2 случаях:

  1. Ваше дерево очень глубоко (тысячи уровней). Таким образом, вам не хватает пространства стека.

  2. Ваше дерево не является фактическим деревом, а графиком (оно имеет циклы, например, с учетом текущего узла, тогда один из дочерних является предком текущего узла).

Я бы поставил на 2.

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

  • Нет связанных вопросов^_^