Binäre Suchbäume

stimmen
5

Dies ist ein Code auf wikipedia über BST gefunden:

# 'node' refers to the parent-node in this case
 def search_binary_tree(node, key):
     if node is None:
         return None  # key not found
     if key < node.key:
         return search_binary_tree(node.leftChild, key)
     elif key > node.key:
         return search_binary_tree(node.rightChild, key)
     else:  # key is equal to node key
         return node.value  # found key

Jetzt ist hier ein Binary Tree:

       10
    5        12
  3   8    9   14
     4 11  

Wenn ich 11 bin auf der Suche, und ich folge dem Algorithmus dort, beginne ich mit 10, ich gehe rechts bis 12 und dann links bis 9. Und ich erreichen das Ende des Baumes ohne 11 zu finden, aber 11 existiert in meinem Baum , es ist nur auf der anderen Seite.

Können Sie mir bitte erklären, was die Einschränkungen in einem Binary Tree für diesen Algorithmus sind auf meinem Baum zu arbeiten?

Vielen Dank.

Veröffentlicht am 07/09/2010 um 06:31
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
3

Nicht zwischen Binary Tree und binärer Suchbaum verwechseln. Das binäre Suchbaum (kurz als BST bezeichnet) ist ein spezieller Typ von binären Baum, wo alle Knoten auf der linken Seite kleiner als oder gleich dem übergeordneten Knoten und alle Knoten rechts größer als der Elternknoten.

Während das Beispiel , das Sie gegeben haben , ist nur ein Binary Tree und nicht ein binärer Suchbaum. Sie können sehen , dass der Wert 11 und 14 an den übergeordneten Knoten verbleiben 10 , die das BST Eigentum verletzt. Werfen Sie einen Blick hier für Binary Suchbäume.

Beantwortet am 07/09/2010 um 06:34
quelle vom benutzer

stimmen
1

Sie haben die Knoten 14 und 11 an der falschen Stelle platziert. Aus dem Wikipedia - Artikel über BSTs :

  • Der linke Unterbaum eines Knotens enthält nur Knoten mit Schlüssel kleiner als der Schlüssel des Knotens.
  • Der rechte Teilbaum eines Knotens enthält nur Knoten mit Schlüssel größer als der Schlüssel des Knotens.
  • Sowohl die linke und rechte Teilbäume müssen auch binäre Suchbäume sein.

Wie Sie sehen können, sind beide 14 und 11 größer als 8.

Beantwortet am 07/09/2010 um 06:35
quelle vom benutzer

stimmen
3

Der Baum Sie nicht ein BST präsentiert. 11 und 14 würden auf die linke Seite von 10 nie wurden eingeführt, und deshalb ist der Algorithmus nicht dort suchen. 9 ist auch fehl am Platz.

Insertion nach Wikipedia:

Insertion beginnt als eine Suche beginnen würde; wenn die Wurzel nicht gleich dem Wert ist, suchen wir den linken oder rechten Teilbäume wie zuvor. Schließlich werden wir einen externen Knoten und fügen Sie den Wert als rechtes oder linkes Kind, je nach dem Wert des Knoten erreichen. Mit anderen Worten, untersuchen wir die Wurzel und rekursiv den neuen Knoten auf der linken Teilbaum einfügen, wenn der neue Wert kleiner als die Wurzel ist, oder rechten Teilbaum, wenn der neue Wert größer als oder gleich der Wurzel.

Man kann sagen, dass ein Binary Tree ist ein BST, wenn sie diese Eigenschaften (auch aus Wikipedia) hat:

  1. Der linke Unterbaum eines Knotens enthält nur Knoten mit Schlüssel kleiner als der Schlüssel des Knotens.
  2. Der rechte Teilbaum eines Knotens enthält nur Knoten mit Schlüssel größer als der Schlüssel des Knotens.
  3. Sowohl die linke und rechte Teilbäume müssen auch binäre Suchbäume sein.
Beantwortet am 07/09/2010 um 06:35
quelle vom benutzer

stimmen
10

Es ist nur, weil Ihr Baum nicht ein binärer Suchbaum ist: Es ist nicht richtig bestellt wird. Die BST ist zu bauen, wie tatsächlich in dem Algorithmus beschrieben. Zum Beispiel in Ihrem Baum: dem Knoten ‚9‘ ist an der richtigen Position nicht, weil als 9 <10 unter dem linken Zweig des Wurzelknoten ‚10‘ sein sollte. Das gleiche gilt für ‚14‘ und ‚11‘, die auf dem rechten Zweig sein sollten.

zum Beispiel könnte ein BST wie diese etw:

    10
  5    11
3   8    12
          14
Beantwortet am 07/09/2010 um 06:37
quelle vom benutzer

stimmen
1

Ihr Baum ist nicht ein binärer Suchbaum

Beantwortet am 07/09/2010 um 06:58
quelle vom benutzer

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