2010-10-31 24 views
2

J'essaie d'équilibrer un BST en construisant d'abord un tableau (inorder), puis en reconstruisant l'arbre entier à partir de mon tableau.Java StackOverflowError lors de la construction récursive d'un tableau à partir d'un arbre de recherche binaire

J'ai:

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; 
} 

et:

bst.toArray(b); 

J'espérais que cela construire un tableau afinde. Mais je reçois StackOverflowError. Si je comprends bien, c'est probablement dû à une récursion infinie, mais je ne peux vraiment pas le voir.

L'erreur se produit sur cette ligne:

index = toArray(node, a, index); 

Toute aide appréciée.

Répondre

5
index = toArray(node, a, index); 

Vous vouliez écrire node.left ou node.right?

+0

Off cause =) désolé de perdre votre temps. Merci! – evading

+0

@refuser - Si cela répond à votre question, "acceptez". –

+0

J'ai pensé que je l'ai fait? J'ai cliqué sur la coche et il m'a dit d'attendre sept minutes de plus, alors je l'ai fait, j'ai cliqué de nouveau et il est devenu vert. Est-ce que j'ai raté quelque chose? – evading

1

ici est:

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

vous avez probablement voulu faire quelque chose avec index (incrément par exemple) ou avec le noeud (comme, node = node.left) (je n'ai pas investigué votre algorithme, juste général suggestions).