Woher weißt du, wo Rotationen in einem AVL-Baum durchgeführt werden sollen?

So, ich bin selbst Lehr-AVL-Bäume, und ich verstehe die Grundidee dahinter, aber ich will nur sichergehen, dass meine intuition in die Tat umzusetzen es gilt:

Werde ich überprüfen Sie mit der Links-rotation-

So, folgende situation ist einfach:

      8
     /\
    7   10
   /
  6
 /
3

Wenn wir die 3, den Baum wieder ins Gleichgewicht selbst zu:

    8
   /\
  6   10
 /\
3   7

Aber ist die rotation auf der Grundlage der addition der 3 oder das Ungleichgewicht der Teilbaum verwurzelt in 7? Ist es auch basiert auf dem Ungleichgewicht der Baum verwurzelt an 8?

Folgenden Beispiel ist, wo die Dinge erhalten ein wenig haarig, meiner Meinung nach:

      9
     /\
    7   10
   /\
  6   8
 /
3

So, in diesem Fall, den Teilbaum unter 7 ist gut, wenn die 3 Hinzugefügt, so dass Teilbaum braucht nicht zu rotieren. Aber der Baum bei 9 ist unausgewogen mit dem Zusatz von 3, so dass wir der Basis die Drehung am 9. Wir erhalten:

      7
     /\
    6   9
   /  /\
  3   8   10

Also schriftlich mein code, den ich ziemlich bald, würden Sie den folgenden code, beginnend von kleinen unterstrukturen arbeiten bis zu größeren teilbäumen den trick tun?

pseudocode:

function balanceTree(Node n){

  if (n is not null){

    balanceTree(n.rightchild);
    balanceTree(n.leftchild);
  }

  if (abs(balanceFactor(n))>1){

    rotateAsNeeded(n);//rotate based on balance factor

  }

}

Vielen Dank im Voraus!

InformationsquelleAutor der Frage Skorpius | 2013-06-21

Schreibe einen Kommentar