Невозможно получить значение корневого узла из True. Вместо этого дает значение последних узлов
У меня есть открытый класс Q5, который имеет вложенный закрытый статический класс BinTree. В основном я создаю объект q5 и даю 3 узла для добавления в дерево.
Когда я пытаюсь получить значение корня, он возвращает значение последнего узла (здесь он должен возвращать 1, а не 3)
public class Q5 {
private static BinTree root;
public Q5(int ... args)
{
BinTree binTreeLeftChild,binTreeRightChild,root;
root = new BinTree();
binTreeLeftChild = new BinTree();
binTreeRightChild = new BinTree();
root.value = args[0];
binTreeLeftChild.value = args[1];
binTreeRightChild.value = args[2];
root.left = binTreeLeftChild;
root.right = binTreeRightChild;
}
private static class BinTree
{
private static BinTree left;
private static BinTree right;
private static int value;
public BinTree()
{
// TODO Auto-generated constructor stub
left = null;
right = null;
value = 0;
}
}
public static void main(String[] args)
{
Q5 q5 = new Q5(1,2,3);
System.out.println(q5.root.value);
}
2 ответа
Решение
Вы должны удалить static
идентификаторы в BinTree
в противном случае все объекты этого класса будут иметь одинаковые значения.
В Q5(int ... args)
у вас есть личная переменная, которая скрывает переменную класса root
, Вы должны удалить это тоже.
Исправленный код:
public class Q5 {
private static BinTree root;
public Q5(int ... args) {
BinTree binTreeLeftChild,binTreeRightChild;
root = new BinTree();
binTreeLeftChild = new BinTree();
binTreeRightChild = new BinTree();
root.value = args[0];
binTreeLeftChild.value = args[1];
binTreeRightChild.value = args[2];
root.left = binTreeLeftChild;
root.right = binTreeRightChild;
}
private static class BinTree{
private BinTree left;
private BinTree right;
private int value;
public BinTree() {
// TODO Auto-generated constructor stub
left = null;
right = null;
value = 0;
}
}
...
}
Я думаю, что проблема в вашем "статическом". Попробуйте использовать нестатические переменные для вашего BinTree.