Java StackOverflowError при рекурсивном построении массива из дерева двоичного поиска - PullRequest
2 голосов
/ 31 октября 2010

Я пытаюсь сбалансировать BST, сначала создав массив (inorder), а затем перестроил все дерево из моего массива.

У меня есть:

 public void toArray(E[] a) {
  toArray(root, a, 0);
 }

 /*
  * Adds all elements from the tree rooted at n in inorder to the array a
  * starting at a[index].
  * Returns the index of the last inserted element + 1 (the first empty
  * position in a).
  */
 private int toArray(BinaryNode<E> node, E[] a, int index) {
  if (node.left != null) {
   index = toArray(node, a, index);
  }

  a[index] = node.element;
  index++;

  if (node.right != null) {
   index = toArray(node, a, index);
  }

  return index;
 }

и

bst.toArray(b);

Я надеялся, что это создаст порядок массивов. Но я получаю StackOverflowError. Как я понимаю, это возможно из-за бесконечной рекурсии, но я действительно не вижу этого.

Ошибка в этой строке:

index = toArray(node, a, index);

Любая помощь приветствуется.

Ответы [ 2 ]

5 голосов
/ 31 октября 2010
index = toArray(node, a, index);

Вы хотели написать node.left или node.right?

1 голос
/ 31 октября 2010

вот оно:

if (node.left != null) {
    index = toArray(node, a, index);
}

вы, вероятно, хотели что-то сделать с index (например, с приращением) или с узлом (например, node = node.left) (я не исследовалваш алгоритм, только общие предложения).

...