Een BST uit een array

stemmen
1

Ik moet een binaire zoekboom in de volgende (rare) manier te maken:

Ik kreeg een matrix (A [n]). A [1] wordt de wortel van de boom.

  • Vervolgens voeg ik A [1] + A [2] naar links substructuur (subtree1 hierna gebruikt) wortels en ook invoegen A [1] -A [2] naar rechts deelboom (subtree2) van de wortel.

  • Voeg ik A [1] + A [2] + A [3] links substructuur van subtree1 (subtree3) en A [1] + A [2] -A [3] rechts deelboom van subtree1 (subtree4).

  • Vervolgens voeg ik A [1] -A [2] + A [3] links substructuur van subtree2 (subtree5) en A [1] -A [2] -A [3] rechts deelboom van subtree2 (subtree6 ).

  • Nogmaals voor subtree3, subtree4, subtree5, subtree6 tot ik het einde van de array bereikt.

Dus, in principe, het eerste element van de array wordt de wortel van de boom en ga dan ik naar beneden: Elke linker deelboom heeft voor de waarde van de som van haar moedermaatschappij plus het volgende element van de array en elke rechter deelboom heeft voor de waarde van het verschil van zijn ouder en het volgende element in de matrix.

Ik begrijp dat ik nodig om het concept van de recursie, maar in een gewijzigde manier te gebruiken. Het typen van mijn probleem hier en proberen om het anders uit elkaar uit te leggen aan iemand van mijn hersenen maakte me eigenlijk te vormen op een manier die me een aantal ideeën gaf te proberen, maar ik kan het probleem dat ik te maken heb met het zijn een gebruikelijke probleem te zien, dus misschien je kon geven me wat tips over hoe je recursie gebruiken om de boom te bouwen.

Kijk rond in andere vragen en de discussies Ik begrijp dat er is een beleid tegen vraagt ​​hele oplossingen zodat wilde ik duidelijk maken dat ik niet te vragen voor de oplossing, maar voor begeleiding aan. Als iemand wil graag een kijkje te nemen kan ik je laten zien wat ik al heb gedaan.

De vraag is gesteld op 24/03/2011 om 02:20
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

De manier om recursie te doen is om altijd vanuit dat je al een werkende functie in de hand. Dus laten we eens kijken [gebruik van Java syntax] ...

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

Stel dat werkt. Dan hoeft u hoeft te doen om een ​​boom te bouwen bij 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);

Dat is eigenlijk het. U dient zorg te dragen voor de rand gevallen: van index = Array.length, de oprichting van de eerste knooppunt, en dergelijke

antwoordde op 24/03/2011 om 02:27
bron van user

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