Vytvoření BST z pole

hlasů
1

Musím vytvořit strom binárního vyhledávání v následujícím (podivné) způsobem:

Mi dána matice (A [n]). A [1] se stane kořen stromu.

  • Potom, vložení a [1] + a [2] doleva podstromu (subtree1, který se používá pod) kořene a také vložit [1] -A [2] na pravou podstromu (subtree2) kořene.

  • Vložení a [1] + a [2] + a [3] do levého podstromu subtree1 (subtree3) a A [1] + a [2] -A [3] do pravého podstromu subtree1 (subtree4).

  • Potom, vložení a [1] -A [2] + A [3] do levého podstromu subtree2 (subtree5) a [1] -A [2] -A [3] do pravého podstromu subtree2 (subtree6 ).

  • Opakuji pro subtree3, subtree4, subtree5, subtree6 až dojdu na konec pole.

Takže v podstatě je první prvek pole se stává kořen stromu a pak jsem se přesunout dolů: Každý levý podstrom má na hodnotu součtu svého mateřského plus další prvek pole a každý pravý podstrom již za úplatu, jejichž rozdíl její mateřské a následujícího prvku v poli.

Chápu, musím používat pojem rekurze, ale v pozměněné podobě. Zadáním můj problém tady a snažil se to vysvětlit někomu jinému kromě mého mozku vlastně se mi to vytvoření takovým způsobem, aby mi dal nějaké nápady, aby se pokusili, ale vidím problém jednám s tím, že obvyklý problém, takže možná byste mohl dát me několik rad, jak používat rekurzi stavět strom.

Bohužel tu další otázky a diskuse Chápu, že je politika vůči žádat celé řešení tak jsem chtěl, aby bylo jasné, že nejsem žádá řešení, ale jako vodítko k tomu. Kdyby někdo chtěl, aby se podíval Mohu vám ukázat, co jsem už udělal.

Položena 24/03/2011 v 02:20
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Způsob, jakým k tomu rekurze je vždy předpokládat, že již máte pracovní funkce v ruce. Takže pojďme se podívat [pomocí syntaxe jazyka Java] ...

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

Předpokládejme, že funguje. Pak by se u potřeba udělat, aby se vytvořit strom na indexu 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);

To je v podstatě to. Musíte se postarat o případy okrajových: indexu = Array.length, vytvoření prvního uzlu a podobně

Odpovězeno 24/03/2011 v 02:27
zdroj uživatelem

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