繁体   English   中英

Java中的AVL树数据提取器

[英]AVL Tree Data Strutcher in Java

我已经写了一个用于AVL树插入的代码,但是当我尝试打印根节点的值时,它总是返回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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM