Erstellen eines BST aus einem Array

stimmen
1

Ich brauche einen binären Suchbaum in der folgenden (seltsam) Art und Weise zu erstellen:

Ich bin ein Array gegeben (A [n]). A [1] wird die Wurzel des Baumes.

  • Dann legen I a [1] + a [2], um die linke Teilbaum (subtree1 verwendete unten) der Wurzel und auch einzufügen A [1] -A [2] auf der rechten Unterbaum (subtree2) der Wurzel.

  • I einzufügen A [1] + a [2] + a [3] auf der linken Unterbaum des subtree1 (subtree3) und A [1] + A [2] -A [3] auf der rechten Unterbaum des subtree1 (subtree4).

  • Dann fügen I a [1] -A [2] + A [3] auf der linken Unterbaum des subtree2 (subtree5) und A [1] -A [2] -A [3] auf der rechten Unterbaum des subtree2 (subtree6 ).

  • Ich wiederhole für subtree3, subtree4, subtree5, subtree6, bis ich das Ende des Arrays erreichen.

Also, im Grunde wird das erste Element des Arrays die Wurzel des Baumes und dann habe ich nach unten bewegen: Jede linke Unterbaum für Wert hat die Summe seiner Eltern und das nächste Element des Arrays und jeder rechten Teilbaum für Wert der Differenz von Mutter und des nächsten Elements in der Anordnung.

Ich verstehe, ich brauche das Konzept der Rekursion zu verwenden, aber in modifizierter Form. Typing mein Problem hier und versuchen, es mit jemandem zu erklären, sonst abgesehen von meinem Gehirn hat mich tatsächlich zu bilden, in einer Weise, die mir einige Ideen gab, um zu versuchen, aber ich kann das Problem sehen, mit denen ich zu tun ein übliches Problem ist, so vielleicht könnten Sie geben ich einige Hinweise, wie man Rekursion verwenden, um den Baum zu bauen.

Umsah bei anderen Fragen und den Diskussionen, die ich dort verstehen, ist eine Politik gegen fragen ganze Lösungen, damit ich es, dass ich klar machen wollte fragen mich nicht für die Lösung, sondern um Führung zu. Wenn jemand einen Blick haben möchte kann ich Ihnen zeigen, was ich bereits getan habe.

Veröffentlicht am 24/03/2011 um 02:20
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Die Art und Weise Rekursion zu tun ist, immer vorausgesetzt, dass Sie bereits eine Arbeitsfunktion in der Hand haben. Also mal sehen, [mit Hilfe von Java-Syntax] ...

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

Angenommen, das funktioniert. Dann würde braucht u zu tun, um einen Baum am Index i zu bauen?

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

Das ist im Grunde es. Sie müssen sich um die Grenzfälle nehmen: von index = array.length, Schaffung des ersten Knotens und dergleichen

Beantwortet am 24/03/2011 um 02:27
quelle vom benutzer

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