У меня проблема с моим кодом, я делаю структуру данных Двоичного поиска, и когда я вызываю функцию с дочерним узлом, а затем присваиваю значение этому дочернему элементу внутри функции, он не обновляет дочерний узел
//*** Pseudo-ish Code ***
class BSTNode {
private BSTNode lChild;
private BSTNode rChild;
private int key;
public BSTNode(int key) {
this.lChild = null;
this.rChild = null;
this.key = key;
}
//getters and setters for each field ^
}
class BST {
private BSTNode root;
public BST() {
this.root = null;
}
public void insert(BSTNode currentNode, int value) {
BSTNode newNode = new BSTNode(value);
if (currentNode == null) {
currentNode = newNode;
if (this.root == null) {
this.root = currentNode;
}
} else {
//ignore the newNode == currentNode value statement right now
if (newNode.getValue() < currentNode.getValue()) {
insert(currentNode.getlChild(), value);
} else if (newNode.getValue() > curNode.getValue()) {
insert(curNode.getrChild(), value);
}
}
}
//getters and setters
}
Я все еще хочу выяснить код сам, но мне любопытно, почему, если бы я должен был запустить этот код с:
BST testBST = new BST();
testBST.insert(testBST.getRoot(), 10);
testBST.insert(testBST.getRoot(), 7);
System.out.print(testBST.getRoot());
System.out.print(" ");
System.out.print(testBST.getRoot().getlChild());
Это выведет 10
, затем NullPointerException. Я понимаю, это потому, что как-то семерка не была выделена как 10-тилетняя, но я не знаю почему? У меня проблема с областью действия, или это потому, что я рекурсивно вызываю getlChild () в моей функции вставки, что у меня нет доступа к фактическому закрытому полю lChild?
ПРИМЕЧАНИЕ: я использовал sysout для отладки своего кода, и я заметил, что рекурсия работает, и она правильно назначает 7 для currentNode, но затем, когда функция завершена, она похоже на currentNode, больше не ссылающийся на lChild исходного корневого узла.