не объявляйте Node root
как static
в этой строке private static Node root;
, лучше сделать следующее:
private Node root; // remove the "static" keyword
И у вас еще одна ошибка в main method
// insertValue(); // it is wrong
alpha.insertValue(); // call it like this
И все будет в порядке ...
Теперь почему это происходит :
Чтобы понять, почему это происходит, вы должны понять как static
работает в java
. Все, что объявлено с использованием static
, может быть method/variable
, - это shared
между all objects
от class
. А это означает, что будет только один экземпляр переменной для всех объектов, или вы можете сказать, что все объекты будут совместно использовать одну единственную переменную. Теперь, как сказано, не non-static
variable/method
не может быть used/called
в method
, которое объявлено как static
т.е. static method
. Просто вы не можете использовать non-static
variable/method
в методе static
. Причина, static method
принадлежит области класса, а указатель this
не передается в static method
, поэтому вы не можете использовать non-static
переменные / методы.
Если вы поняли концепцию stati c, теперь позвольте мне объяснить проблемы вашего кода:
Первая проблема - почему static root
неверно :
Причина, если вы объявляете root
как static
будет only one root
для всех Binary Tree
, которые вы создаете. Но, конечно, вы ожидаете, что у разных двоичных деревьев будут разные корни.
Вторая проблема - почему просто вызов insertValue();
неверен :
Вы в main() method
, обратите внимание, что main()
равно static
. Но insertValue()
- это not static
. Но вы уже знаете, что вы не можете вызвать метод non-static
из метода static
.
Надеюсь, это проясняет ваше понимание. дайте мне знать, если у вас возникнут еще вопросы ...