Opprette et BST fra en matrise

stemmer
1

Jeg må opprette et binært søketre i følgende (merkelig) måte:

Jeg får en gruppe (A [n]). A [1] blir roten av treet.

  • Da jeg innlegg A [1] + A [2] til den venstre undertreet (subtree1, anvendt nedenfor) av roten og også sette A [1] -A [2] til høyre undertreet (subtree2) av roten.

  • I innlegg A [1] + A [2] + A [3] til venstre undertreet til subtree1 (subtree3) og A [1] + A [2] -A [3] til høyre subtre av subtree1 (subtree4).

  • Da jeg innlegg A [1] -A [2] + A [3] til venstre undertreet til subtree2 (subtree5) og A [1] -A [2] -A [3] til høyre subtre av subtree2 (subtree6 ).

  • Jeg gjentar for subtree3, subtree4, subtree5, subtree6 til jeg kommer til enden av tabellen.

Så, i utgangspunktet, blir det første elementet i matrisen roten av treet, og da jeg flytte ned: Hver venstre subtre har for verdien summen av moder pluss neste element i matrisen og alle rett treet har for verdien forskjellen på dens forelder og av det neste element i rekken.

Jeg forstår at jeg må bruke begrepet rekursjon, men i en modifisert måte. Skrive mitt problem her og prøver å forklare det til noen andre bortsett fra hjernen min faktisk gjort meg danne det på en måte som ga meg noen ideer til å prøve, men jeg kan se problemet jeg arbeider med å være et vanlig problem så kanskje du kunne gi meg noen tips om hvordan du kan bruke rekursjon til å bygge treet.

Leter du rundt på andre spørsmål og diskusjonene jeg forstår det er en policy mot å spørre hele løsninger så jeg ønsket å gjøre det klart at jeg ber ikke om løsningen, men for veiledning til det. Hvis noen ønsker å ta en titt jeg kan vise deg hva jeg allerede har gjort.

Publisert på 24/03/2011 klokken 01:20
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Måten å gjøre rekursjon er å alltid anta at du allerede har en fungerende funksjon i hånden. Så la oss se [ved hjelp av Java syntaks] ...

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

Anta at fungerer. Da ville gjøre u trenger å gjøre for å bygge et tre på indeksen 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);

Det er i utgangspunktet det. Du må ta vare på kanten tilfeller: indeksen = tabell.length, opprettelse av de aller første noden, og lignende

Svarte 24/03/2011 kl. 01:27
kilden bruker

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