Création d'un BST d'un tableau

voix
1

Je dois créer un arbre de recherche binaire de la manière suivante (étrange):

Je me donne un tableau (A [n]). A [1] devient la racine de l'arbre.

  • Ensuite, insérer A [1] + A [2] à la sous-arborescence à gauche (subtree1, utilisé ci-dessous) de la racine et insérer également un [1] -A [2] au sous-arbre droit (subtree2) de la racine.

  • Insérer un [1] + A [2] + A [3] à la sous-arborescence de gauche subtree1 (subtree3) et A [1] + A [2] -A [3] à la sous-arborescence de droite subtree1 (subtree4).

  • Ensuite, insérer un [1] -A [2] + A [3] à la sous-arborescence de gauche subtree2 (subtree5) et un [1] -A [2] -A [3] à la sous-arborescence de droite subtree2 (subtree6 ).

  • Je le répète pour subtree3, subtree4, subtree5, subtree6 jusqu'à atteindre la fin du tableau.

Donc, en gros, le premier élément du tableau devient la racine de l'arbre puis-je déplacer vers le bas: Chaque sous-arbre gauche a pour valeur la somme de ses parents ainsi que l'élément suivant du tableau et chaque sous-arbre droit a pour valeur la différence de son parent et de l'élément suivant dans le réseau.

Je comprends que je dois utiliser le concept de récursion mais d'une manière modifiée. En tapant mon problème ici et d'essayer de l'expliquer à quelqu'un d'autre en dehors de mon cerveau me fait réellement former d'une manière qui m'a donné quelques idées pour essayer, mais je peux voir le problème que je traite d'être un problème habituel de sorte que vous pourriez peut-être donner moi quelques conseils sur la façon d'utiliser la récursivité pour construire l'arbre.

En regardant autour d'autres questions et les discussions que je crois qu'il ya une politique de ne pas demander des solutions entières donc je voulais préciser que je ne demande pas la solution, mais pour l'orientation à lui. Si quelqu'un voudrait avoir un regard que je peux vous montrer ce que je l'ai déjà fait.

Créé 24/03/2011 à 02:20
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

La façon de le faire est de récursion toujours supposer que vous avez déjà une fonction de travail à la main. Voyons donc [en utilisant la syntaxe Java] ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

Supposons cela fonctionne. Ensuite FERAIENT u besoin de faire pour construire un arbre à l'index i?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

C'est essentiellement cela. Vous devez prendre soin des cas de pointe: l'indice = array.length, création du premier noeud, etc.

Créé 24/03/2011 à 02:27
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more