Я недавно изучил бинарное дерево поиска, и вот одна из реализаций дерева. Мне было интересно, почему оператор return не выйдет, пока l oop, а буквально вернется к первой строке l oop. Вот код в режиме отладчика с IntelliJ Фрагмент кода в режиме отладчика .
public class BinaryTree {
Node root;
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
bt.insert(3, "root");
bt.insert(2,"left");
bt.insert(1,"leftchild");
}
public void insert(int value, String name) {
Node newNode = new Node(value, name);
if (root == null) {
root = newNode;
} else {
Node focusNode = root;
Node parent;
while (true) {
parent = focusNode;
if (value < focusNode.value) {
focusNode = focusNode.left;
if(focusNode == null) {
parent.left = newNode;
return;
}
} else {
focusNode = focusNode.right;
if(focusNode == null) {
parent.right = newNode;
return;
}
}
}
}
}
Обнаружив, что левый потомок узла на уровне один не пустой, выполнение «возвращает» себя к первой строке в то время как l oop и назначает левого потомка, упомянутого ранее, родительский узел; родительский узел был root раньше.