これがノードを使用した初めてのコーディングであるため、これが正しく行われているかどうかはわかりません。しかし、誰かがそれを見て、私が何か間違っているかどうかを理解するのを手伝ってくれるなら、これまでの私のコードです。また、私の挿入/削除方法も苦労しています。教授はそのための疑似コードをくれましたが、この種のコードをこれまでやったことがないので、それを Java コードに解釈する方法を理解できないようです。主に、高さをチェックしてツリーのバランスが取れているかどうかを確認するifステートメントがあるため、これに高さをどのように実装しますか? ヒントやヘルプは大歓迎です。私はしばらくこれにこだわっています。ありがとう!
また、コンストラクターを正しく実行したとは思わず、それについて確信が持てません。挿入/削除のリターンは無視できます。コードの残りの部分が確実にコンパイルされるようにするためにそこに入れられただけです。
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);
}
}