ausgeglichener Baum binäre Suche SortedSet mit

stimmen
0

Bitte helfe Ich habe 1024 einen zufälligen binären Suchbaum der Größe zu erzeugen versucht, und die Elemente benötigen zufällig SortedSet sein ... Ich bin in der Lage, einen Code zu schreiben einen binären Suchbaum manuell Elemente durch Hinzufügen manuell zu erstellen, aber ich m unablele yo schreibt einen Code, der einen zufälligen ausgeglichenen Binärbaum der Größe 1024 dann versuchen verwenden, um finden Sie einen Schlüssel in diesem Baum erzeugen würde ... bitte bitte und danke u voraus ....

Bearbeiten hinzugefügt Code von Kommentaren

ya ist es Hausaufgaben ... und das ist, was ich bisher als Code bekam:

using System; 
namespace bst { 
    public class Node { 
        public int value; 
        public Node Right = null; 
        public Node Left = null; 

        public Node(int value) 
        { 
            this.value = value; 
        } 
    } 

    public class BST { 
        public Node Root = null; 
        public BST() { }

        public void Add(int new_value) 
        { 
            if(Search(new_value)) 
            {
                Console.WriteLine(value ( + new_value + ) already);
            }
            else
            {
                AddNode(this.Root,new_value);
            }
        }
    }
}
Veröffentlicht am 21/01/2011 um 00:53
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Verwenden Sie Rekursion. Jeder Zweig erzeugt einen neuen Zweig, das mittlere Element in dem unsortierten Satz auswählen, der Median. Legen Sie es in der aktuellen Position im Baum. Kopieren Sie alle Elemente weniger als der Median zu einem anderen Array, senden, dass neue Array auf den Aufruf der gleichen Methode. Kopieren Sie alle Elemente größer als der Median zu einem anderen Array, das neue Array auf den Aufruf der gleichen Methode senden. \

Ausgeglichene Bäume haben eine ungerade Anzahl von Elementen haben, es sei denn, der Hauptübergeordneten Knoten in nicht gefüllt ist. Sie müssen entscheiden, ob es zwei Werte, die die Median sind, ob das Duplikat auf dem unteren Zweig oder oberen Zweig gehört. Ich habe Duplikate auf dem oberen Zweig in meinem Beispiel.

Der Median wird die Zahl sein, wo eine gleiche Menge von Zahlen kleiner als und größer als die Zahl. 1,2,3,3,4,18,29,105,123 In diesem Fall ist der Median 4, obwohl der Mittelwert (oder durchschnittlich) ist viel höher.

Ich habe umfassen nicht-Code, der den Median bestimmt.

BuildTreeItem(TreeItem Item, Array Set)  
{
  Array Smalls;
  Array Larges;
  Median = DetermineMedian(Set);
  Item.Value = Median;
  if(Set.Count() == 1)
    return;  
  for (int i = 0; int i < Set.Count(); i++)
  {
    if(Set[i] < Median)
    {
      Smalls.new(Set[i]);
    }
    else
    {
      Larges.new(Set[i]);
    }
  }
  Item.Lower = new TreeItem;
  Item.Upper = new TreeItem;
  BuildTreeItem(TreeItem.Lower, Smalls);
  BuildTreeItem(TreeItem.Upper, Larges);
}
Beantwortet am 21/01/2011 um 01:13
quelle vom benutzer

stimmen
0

Es sei denn , es ist Hausaufgaben würde die einfachste Lösung , um Daten werden zuerst sortieren und dann unter Verwendung mittlere Element als Wurzel eines Baumes bauen und absteigend jede Hälfte nach unten. Verfahren vorgeschlagen , durch Xaade ist ähnlich , aber viel langsamer aufgrund DetermineMedian Komplexität .

Die andere Option ist , um tatsächlich an Algorithmen zu suchen , die ausgeglichenen Bäume bauen (wie http://en.wikipedia.org/wiki/Red-black_tree ) , um zu sehen , ob es Ihre Anforderungen paßt.

EDIT: falsche Aussage über die Geschwindigkeit von Xaade Algorithmus zu entfernen - es tatsächlich so schnell wie schnell sortieren ist (n log n - überprüfen Sie jedes Element auf jeder Ebene der Rekursion mit log n Ebenen der Rekursion), nicht sicher, warum ich es langsamer geschätzt.

Beantwortet am 21/01/2011 um 02:42
quelle vom benutzer

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