AVL-Baum für Java
Ich bin mir nicht sicher, ob ich hier mache, richtig, wie dies ist meine erste Zeit-Codierung mit Knoten. Aber hier ist mein code bisher, falls jemand vorbei schauen und mir helfen, mit Verständnis, wenn ich mache etwas falsch. Auch mein insert/remove-Methoden geben mir eine harte Zeit. Der professor gab uns den pseudocode für das, aber ich kann nicht scheinen, um zu begreifen, wie es zu deuten in Java-code, wie ich es nie getan habe, diese Art von code vor. Vor allem, weil es ist eine if-Anweisung, prüft die Höhen, um zu sehen, wenn der Baum balanciert ist, wie würde ich das umsetzen, in dieser Höhe? Tip oder jede Hilfe ist sehr dankbar, ich Hänge schon länger auf diese für eine Weile. Danke!
Ich glaube auch nicht, ich habe mein Konstruktor richtig und ich bin unsicher. Die Rückkehr in die einfügen/entfernen kann ignoriert werden, es war einfach da, um sicherzustellen, dass der rest der der code kompiliert wird.
public class AvlNode{
public static void main(String[]args){
}
//constructor
public class AvlTreeNode{
private int num;
private AvlTreeNode left;
private AvlTreeNode right;
public AvlTreeNode left(){
return this.left;
}
public AvlTreeNode right(){
return this.right;
}
public int value(){
return this.num;
}
}
//method to find the number specified on the node
public AvlTreeNode find(AvlTreeNode t, int x){
if(t == null){
return null;
}
if( t.value() == x){
return t;
}
else if(x < t.value()){
return find(t.left(), x);
}
else{
return find(t.right(), x);
}
}
//method to insert a new node and number to a tree
public AvlTreeNode insert(AvlTreeNode t, int x){
if(t == null){
t = new AvlTreeNode(x, null, null);
return t;
}
if(x < t.value()){
t.left = insert(t.left(), x);
}
return t;
}
//method to remove a node and number from the tree
public AvlTreeNode remove(AvlTreeNode t, int x){
return t;
}
//Inorder traversal method, should print out numbers in ascending order if correct
public void inOrder(AvlTreeNode t){
if(t != null){
inOrder(t.left());
System.out.print(t.value() + " ");
inOrder(t.right());
}
}
//single rotation of nodes to balance tree, rotating leftwards
public static AvlTreeNode singleRotateWithLeft( AvlTreeNode k1){
AvlTreeNode k2 = k1.left;
k1.left = k2.right;
k2.right = k1;
return k2;
}
//single rotation of nodes to balance tree, rotating rightwards
public static AvlTreeNode singleRotateWithRight( AvlTreeNode k2){
AvlTreeNode k1 = k2.right;
k2.right = k1.left;
k1.left = k2;
return k1;
}
//double rotation of nodes towards the left
public static AvlTreeNode doubleRotateWithLeft( AvlTreeNode k3){
k3.left = doubleRotateWithRight(k3.left);
return doubleRotateWithLeft(k3);
}
//double rotation of nodes towards the right
public static AvlTreeNode doubleRotateWithRight( AvlTreeNode k2){
k2.right = doubleRotateWithLeft(k2.right);
return doubleRotateWithRight(k2);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bezüglich der Konstruktor: ich denke, die Sache, die falsch ist, ist, dass Sie Fehler der inneren Klasse, die Sie verwenden, um zu beschreiben, eine AvlTreeNode für einen Konstruktor. Aller Wahrscheinlichkeit nach werden Sie nicht brauchen, schreiben einen expliziten Konstruktor, weil Sie den Standardwert (leer) wird für Sie tun.
Den Bau von einem Baum angesehen werden kann als die Einfügung von allen Knoten zu einem leeren Baum.
Bezüglich der Höhe hat, sollte man vielleicht anzeigen, die die Höhe des Baumes als eine Eigenschaft, die jeder AvlTreeNode (so, neben
num
Sie brauchen eineheight
variable). Das nächste, was sein wird, zu implementieren, einzusetzen und zu entfernen, so dass Sie die richtige lokale Transformationen /Rotationen verwendet werden, und so, dass die Höhen der einzufügenden Knoten und seine Kinder werden erhöht oder verringert Sie entsprechend.edit: ich sehe jetzt, dass Ihr code verwendet einen Konstruktor mit drei Argumenten. Sie können einen Konstruktor wie in diesem Beispiel-code.