Почему оператор return не завершает выполнение while l oop, а вместо этого возвращает резервную копию самой первой строки while l oop? - PullRequest
0 голосов
/ 12 марта 2020

Я недавно изучил бинарное дерево поиска, и вот одна из реализаций дерева. Мне было интересно, почему оператор 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 раньше.

...