Létrehozása BST egy tömbben

szavazat
1

Létre kell hozni egy bináris keresési fa a következő (érdekes) módon:

Én megadott tömb (A [n]). A [1] lesz a gyökér a fa.

  • Aztán helyezzen egy [1] + A [2], hogy a bal oldali részfa (subtree1, használt alább) a gyökér és helyezzen be egy [1] -A [2], hogy a jobb oldali részfa (subtree2) a gyökér.

  • I helyezzen egy [1] + A [2] + A [3], hogy a bal részfáját subtree1 (subtree3) és A [1] + A [2] -A [3], hogy a megfelelő részfáját subtree1 (subtree4).

  • Aztán helyezzen egy [1] -A [2] + A [3], hogy a bal részfáját subtree2 (subtree5) és A [1] -A [2] -A [3], hogy a megfelelő részfáját subtree2 (subtree6 ).

  • Ismétlem az subtree3, subtree4, subtree5, subtree6 amíg eléri a végén a tömb.

Tehát, alapvetően az első elem a tömb lesz a gyökér a fa, aztán lejjebb: Minden bal alfában értékért összege a szülő, valamint a következő elem a tömb, és minden jobb részfa még értékért különbsége szülő és a következő elem a tömbben.

Értem, hogy kell használni a koncepció rekurzió, hanem egy módosított formában. Gépelés én problémám itt, és megpróbálja elmagyarázni valakinek eltekintve az agyam tényleg engem képeznek azt oly módon, hogy adott nekem néhány ötlet, hogy megpróbálja, de látom a problémát foglalkozom, hogy a szokásos probléma, így talán meg lehet adni nekem néhány mutató, hogyan kell használni a rekurzió építeni a fa.

Körülnézett más kérdések, a tárgyalások jól értem van egy politikai ellen kérve egész megoldás így akartam világossá tenni, hogy én nem kértem a megoldást, hanem útmutatást is. Ha valaki szeretne egy pillantást meg tudom mutatni, amit én már megtettem.

A kérdést 24/03/2011 02:20
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

A módja rekurzió mindig feltételezzük, hogy már a működőképesség a kezében. Tehát lássuk [Java szintaxis] ...

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

Tegyük fel, hogy működik-e. Akkor lenne do u kell tennie, hogy építsenek egy fát az i index?

// 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);

Ez alapvetően azt. Meg kell vigyázni a szélső esetek: az index = array.length, létrehozása a legelső csomópont és hasonlók

Válaszolt 24/03/2011 02:27
a forrás felhasználó

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