创建新节点会不断更改所有节点(Java)

创建新节点会不断更改所有节点(Java),java,data-structures,tree,nodes,avl-tree,Java,Data Structures,Tree,Nodes,Avl Tree,我试图建立一个AVL树,但似乎有一个节点的问题。我尝试创建一个新节点,它会将其他节点的所有值更改为我给新节点的值 //AVL.java import java.util.*; import java.io.*; public class AVL{ static AvlNode root; public static void tree(int[] list){ for(int i=0; i<list.length; i++){ insertP

我试图建立一个AVL树,但似乎有一个节点的问题。我尝试创建一个新节点,它会将其他节点的所有值更改为我给新节点的值

//AVL.java
import java.util.*;
import java.io.*;

public class AVL{
    static AvlNode root;

   public static void tree(int[] list){
      for(int i=0; i<list.length; i++){
         insertPrep(list[i]);
      }
   }


   public static void insertPrep(int data){
        //if not null insert data into existing root node otherwise make new node using data
        if (root==null){root = new AvlNode(data);}
        else {
             System.out.println("inPr else");
             System.out.println(root.key +  " & " + data);
             AvlNode newNode = new AvlNode(data);
             System.out.println(root.key +  " & " + newNode.key);

      }
    }

   //where tree is made and stored
    static class AvlNode{
        static int key, height; //data for input numbers and height for height of nodes to keep balance
        static AvlNode left, right; //left for left side of tree and right for right side of tree    

        AvlNode(int data){
             key = data;
       }

   }
}
//AVL.java
导入java.util.*;
导入java.io.*;
公共类AVL{
静态AvlNode根;
公共静态无效树(int[]列表){

对于(int i=0;很抱歉我之前的评论过于简短。您的问题是
AvlNode
中的这两行

static int key, height; 
static AvlNode left, right;

这意味着对于这四个字段中的每一个,每个
AvlNode
都有相同的值。这意味着树的每个节点只有一个
key
,一个
height
;树的每个节点只有一个左子代和一个右子代。您确实需要删除那些
static
>修饰符,这样每个
AvlNode
实例都可以拥有这四个字段的副本。

你知道
static
修饰符的意思以及它如何影响类属性吗?另外,你没有将root连接到其他部分的任何节点
AvlNode
的字段不应该是静态的。不是真的。我只知道编译器是静态的d以前对我说,因为东西不是静态的。对。我得看看那些情绪化的编译器:-)。静态意味着某些东西不属于某个类的特定实例。要使用非静态方法或字段,你需要创建一个对象。这样做会比使所有东西都是静态的更好。
static int key, height; 
static AvlNode left, right;