Servus liebe Programmiergemeinde!
Ich hoffe mal ich bin hier richtig mit meiner Frage
ansonsten bitte ich das zu entschuldigen und mir mitteilen 
Ich habe gerade eine Aufgabe über immutable AVLBäumen zu bearbeiten und habe bereits einiges programmiert und auch genau wie der Professor es haben möchte. Allerdings hänge ich gerade hart an der rotieren Methode und ich hoffe ich kann vielleicht von euch einige Ratschläge sammeln um es dann endlich zu schaffen. Hier erst mal meine Klasse AVLNode mit allen Methoden:
Habe wirklich ewig gegoogled und irgendwie nie das gefunden, was mir die Abfolge des Algorithmus zum rotieren wirklich verständlich zeigt.
Der Knoten, andem rotiert wird, wird in der Hierarchie eins nach oben gelegt und (bei rechts rotieren) seine Linken nachfolger auch wieder links eingeordnet.
Dadurch dass unser Prof wirklich bei jeder Aktion einen komplett neuen Baum erzeugt haben möchte, fällt es mir echt schwer da was zu code zu bringen. Habe auch schon relativ lange gebraucht um die insert- Methode so hinzubekommen.
Wäre da im Prinzip einfach eine Anweisung wie:
Habe da gerade ziemliche Probleme, nachzuvollziehen, ob bei dieser Anweisung dann noch alle benötigten Referenzen die bestehen sollen, da sind oder nicht.
Hoffe ich konnte mich so ausdrücken, dass ihr mein Problem versteht :lol:
Und bedanke mich auch schonmal für Antworten!
LG HazlNut!
Ich hoffe mal ich bin hier richtig mit meiner Frage
Ich habe gerade eine Aufgabe über immutable AVLBäumen zu bearbeiten und habe bereits einiges programmiert und auch genau wie der Professor es haben möchte. Allerdings hänge ich gerade hart an der rotieren Methode und ich hoffe ich kann vielleicht von euch einige Ratschläge sammeln um es dann endlich zu schaffen. Hier erst mal meine Klasse AVLNode mit allen Methoden:
Java:
package avlBaum;
public class AVLNode {
private final int key;
private final String value;
private final int height;
private final int balanceFactor;
private final AVLNode right;
private final AVLNode left;
AVLNode(int key) {
this(key, "");
}
AVLNode(int key, String value) {
this(key, value, null, null);
}
AVLNode(int key, String value, AVLNode right, AVLNode left){
this.key = key;
this.value = value;
this.right = right;
this.left = left;
if(this.right != null && this.left != null){
this.height = Math.max(this.right.height, this.left.height)+1;
}else if(this.right != null){
this.height = this.right.height +1;
}else if(this.left != null){
this.height = this.left.height+1;
}else{
this.height = 0;
}
if(this.right != null && this.left != null){
this.balanceFactor = this.left.height - this.right.height;
}else if(this.right != null){
//??
this.balanceFactor = 0;
}else if(this.left != null){
//??
this.balanceFactor = 0;
}else{
this.balanceFactor = 0;
}
}
public AVLNode insert(int key) {
// Case gleich
if (key == this.key) {
}
// Case links
if (key < this.key) {
AVLNode rechts = this.right;
if (this.left == null) {
AVLNode links = new AVLNode(key);
return new AVLNode(this.key, this.value, rechts, links);
} else {
return new AVLNode(this.key, this.value, rechts, this.left.insert(key));
}
}
// Case rechts
if (key > this.key) {
AVLNode links = this.left;
if (this.right == null) {
AVLNode rechts = new AVLNode(key);
return new AVLNode(this.key, this.value, rechts, links);
} else {
return new AVLNode(this.key, this.value, this.right.insert(key), links);
}
}
return null;
}
public AVLNode checkBalance(AVLNode avlNode){
if(avlNode.balanceFactor > 1){
// return this.rotateLeft(avlNode);
return null;
}else if(avlNode.balanceFactor < -1){
// return this.rotateRight(avlNode);
}else{
return avlNode;
}
}
private AVLNode rotateRight(AVLNode avlNode){
}
}
Habe wirklich ewig gegoogled und irgendwie nie das gefunden, was mir die Abfolge des Algorithmus zum rotieren wirklich verständlich zeigt.
Der Knoten, andem rotiert wird, wird in der Hierarchie eins nach oben gelegt und (bei rechts rotieren) seine Linken nachfolger auch wieder links eingeordnet.
Dadurch dass unser Prof wirklich bei jeder Aktion einen komplett neuen Baum erzeugt haben möchte, fällt es mir echt schwer da was zu code zu bringen. Habe auch schon relativ lange gebraucht um die insert- Methode so hinzubekommen.
Wäre da im Prinzip einfach eine Anweisung wie:
Java:
private AVLNode rotateRight(AVLNode avlNode){
return new AVLNode(avlNode.key, avlNode.value, AVLNode.right, this);
}
Habe da gerade ziemliche Probleme, nachzuvollziehen, ob bei dieser Anweisung dann noch alle benötigten Referenzen die bestehen sollen, da sind oder nicht.
Hoffe ich konnte mich so ausdrücken, dass ihr mein Problem versteht :lol:
Und bedanke mich auch schonmal für Antworten!
LG HazlNut!
Zuletzt bearbeitet: