/ / Appeler de manière récursive une méthode pour construire un arbre de recherche binaire - java, récursivité, arbre binaire

Appel récursif d'une méthode pour construire un arbre de recherche binaire - java, récursivité, binaire

J'essaie de construire un arbre de recherche binaire à partir d'unArrayList des valeurs triées. En essayant de créer l’arbre le plus efficace possible, je prends la valeur moyenne et l’ajoute à l’arbre. Ensuite, prenez récursivement les valeurs les plus à gauche et trouvez le milieu de ces valeurs en entrant CELA dans l'arbre.

Une fois cela fait, la même chose est faite avec le côté droit.

J'appelle la méthode balanceBST () avec la ligne suivante:

balanceBST(iterator.list, 0, iterator.list.size() - 1);

étant donné que iterator.list est une ArrayList d'entiers contenant actuellement des valeurs:
{5, 17, 24, 31, 44, 55, 71, 81, 82, 83, 84, 85, 97}

public void balanceBST(ArrayList<E> values, int start, int end){
int mid = (start + end) / 2;
while(mid >= 0 && end > mid){
insert(values.get(mid));
balanceBST(values, start, mid - 1);
balanceBST(values, mid + 1, end);
}
}

la méthode insert (element) effectue le travail nécessaire pour entrer des choses dans l'arbre binaire.

Cela donne toutes sortes d'erreurs et jeprésumez que cela arrive quand le milieu approche de 0 ou que la fin approche du milieu, mais je suis la logique moi-même et je ne comprends pas pourquoi cela s’effondre.

MODIFIER:

Pour ceux qui liront cela à l'avenir, merci beaucoup à @David. Ce qui suit a résolu le problème:

  public void balanceBST(ArrayList<E> values, int start, int end){
int mid = (start + end) / 2;
if(end < 0 || start > end) return;
insert(values.get(mid));
balanceBST(values, start, mid - 1);
balanceBST(values, mid + 1, end);
}

Réponses:

2 pour la réponse № 1

Pendant que vous passez un appel récursif à balanceBSTvous ne voulez pas que la boucle while se traduise par des entrées répétées. Remplacez le temps par un test de terminaison et revenez. Veillez à n’insérer que> = 0 et <end et exit lorsque les deux sont faux.