Tworzenie BST z tablicy

głosy
1

Muszę stworzyć wyszukiwania binarne drzewo w następujący sposób (obcym):

Ja podano tablicy (A [n]). A [1] stanie się źródłem drzewa.

  • Wtedy wkładka A [1] + A [2] w lewo subtree (subtree1, stosowany poniżej) korzenia, a także wkładka A [1] -A [2] w odpowiednim poddrzewem (subtree2) korzenia.

  • Wstawić [1] + A [2] + A [3] w lewo poddrzewie subtree1 (subtree3) i A [1] + A [2] -A [3] w odpowiednim poddrzewie subtree1 (subtree4).

  • Wtedy wkładka A [1] -A [2] + A [3] w lewo poddrzewie subtree2 (subtree5) i [1] -A [2] -A [3] w odpowiednim poddrzewie subtree2 (subtree6 ).

  • Powtarzam za subtree3, subtree4, subtree5, subtree6 dopóki nie dotrze do końca tablicy.

Tak więc, w zasadzie, pierwszy element tablicy staje się korzeniem drzewa, a potem ruszyć w dół: Każdy lewe poddrzewo ma do wartości sumy jego rodzica plus następny element tablicy i każdego prawego poddrzewa jest dla wartości różnicy jego dominująca i następnego elementu tablicy.

Rozumiem, że muszę używać koncepcję rekursji ale w zmodyfikowanej sposób. Wpisanie mój problem tu i próbuje wytłumaczyć to komuś innemu oprócz mojego mózgu rzeczywiście mnie tworząc go w sposób, który dał mi kilka pomysłów, aby spróbować, ale widzę problem mam do czynienia z bycia zwykle problem, więc może mógłbyś dać mi kilka wskazówek, w jaki sposób korzystać z rekurencji do budowy drzewa.

Rozglądając się w innych pytań i dyskusji Rozumiem, że jest to polityka wobec prosząc całych rozwiązań, więc chciałem, aby było jasne, że nie jestem z prośbą o rozwiązanie, ale dla wytycznych do niego. Jeśli ktoś chciałby rzucić okiem mogę pokazać, co już robiłem.

Utwórz 24/03/2011 o 02:20
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Sposobem na rekurencji jest zawsze zakładam, że już posiadają funkcję pracy w ręku. Więc zobaczmy [użyciem składni Javy] ...

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

Załóżmy, że działa. Wtedy do u trzeba zrobić, aby zbudować drzewo w indeksie 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 właściwie wszystko. Trzeba dbać przypadków brzegowych: od index = Array.length, stworzenie pierwszego węzła, i tym podobne

Odpowiedział 24/03/2011 o 02:27
źródło użytkownik

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