Java中的AVL树数据Strutcher



我已经为AVL树插入编写了代码,但是当我尝试打印root节点的值时,它总是会返回null。我无法理解原因。谁能解决这个问题?我尝试过很多次,但无法解决问题。我很困惑。我希望这里的某人在解决我遇到的问题的情况下会有所帮助,因为我确定这里有很高的专家。

public class AVLTreeMethods {
public Node root = null;
public int height(Node node){
    if (node == null)
        return 0;
    return node.height;
}
public int max(Node node1, Node node2){
    if (node1.height > node2.height)
        return node1.height;
    return node2.height;
}
public Node rotateRight(Node node){
    Node newNode = node.left;
    node.left = newNode.right;
    newNode.right = node;
    node.height = max(node.left,node.right) + 1;
    newNode.height = max(newNode.left, newNode.right) + 1;
    return newNode;
}

public Node rotateleft(Node node){
    Node newNode = node.right;
    node.right = newNode.left;
    newNode.left = node;
    node.height = max(node.left,node.right) + 1;
    newNode.height = max(newNode.left, newNode.right) + 1;
    return newNode;
}
public Node AVLINSERT(int data, Node root){
    if (root == null){
       return new Node(data);
    }
    else if (data > root.data){
        root.left = AVLINSERT(data, root.left);
    }
    else if (data < root.data){
        root.right = AVLINSERT(data, root.right);
    }
    int balance = height(root.left) - height(root.right);
    if (balance > 1){
        if (height(root.left.left) > height(root.left.right)){
            return rotateRight(root);
        }
        else {
            root.left = rotateleft(root.left);
            return rotateRight(root);
        }
    }
    if (balance < -1){
        if (height(root.right.right) > height(root.right.left)){
            return rotateleft(root);
        }
        else
            root.right = rotateRight(root);
            return rotateleft(root);
    }
    root.height = 1 + max(root.left, root.right);
    return root;
}
public void inorderPrinting(Node root){
    inorderPrinting(root.left);
    System.out.println(root.data);
    inorderPrinting(root.right);
}
public void callingAVLInserting(int data){
    AVLINSERT(data,root);
}
public void callinInorderPrinting(){
    inorderPrinting(root);
}

}

仅通过查看您的代码,您就将root初始化为null,但是您没有任何初始化它的构造函数。

所以尝试添加一些类别。

public class AVLTreeMethods {
    public Node root = null;
    //add the following
    public AVLTreeMethods() {
        //initialize your root appropriately e.g.
        this.root = new Node(//pass in some data e.g 0)
    }
    ...rest of your code
}

最新更新