Java 为什么这个递归函数只设置一次?

Java 为什么这个递归函数只设置一次?,java,recursion,Java,Recursion,我知道递归一直在执行,直到它满足基本情况 然而,为什么这个递归函数只设置head的子函数一次 当head变为null时,它返回节点并将head的左子节点或右子节点设置为节点 我得到了这个概念,但是为什么这个递归函数不将所有的左子节点或右子节点设置为节点,即使它是递归函数 还有一个问题,当head为null时,该递归停止,但是为什么该递归不将null的子节点设置为node?此递归将null的头的子节点的前一个设置为节点。为什么 public Node<Integer> insert(N

我知道递归一直在执行,直到它满足基本情况

然而,为什么这个递归函数只设置head的子函数一次

当head变为null时,它返回节点并将head的左子节点或右子节点设置为节点

我得到了这个概念,但是为什么这个递归函数不将所有的左子节点或右子节点设置为节点,即使它是递归函数

还有一个问题,当head为null时,该递归停止,但是为什么该递归不将null的子节点设置为node?此递归将null的头的子节点的前一个设置为节点。为什么

public Node<Integer> insert(Node<Integer> head, Node<Integer> node){
    if(head == null){
        return node;
    }

    if(head.getData() >= node.getData()){
        head.setLeftChild(insert(head.getLeftChild(), node));
    } else {
        head.setRightChild(insert(head.getRightChild(), node));
    }

    return head;
}
公共节点插入(节点头、节点){
if(head==null){
返回节点;
}
if(head.getData()>=node.getData()){
setLeftChild(插入(head.getLeftChild(),节点));
}否则{
setRightChild(插入(head.getRightChild(),节点));
}
回流头;
}

insert
在大多数情况下返回
head
。无论何时返回
head
head.setLeftChild(insert(head.getLeftChild(),node))
都会产生
head.setLeftChild(head.getLeftChild())
head.setRightChild(insert(head.getRightChild(),node))
的结果是
head.setRightChild(head.getRightChild())
。i、 e.在大多数情况下,对
setLeftChild
setRightChild
的调用不会更改当前
头的左/右子节点


只有当
insert(head.getLeftChild(),node)
insert(head.getRightChild(),node))
被传递
null
值时(即
head.getLeftChild()
head.getRightChild()
null
),递归调用才会返回新的
节点
节点
,这会导致
head.setLeftChild(insert(head.getLeftChild(),node))
导致
head.setLeftChild(node)
head.setRightChild(insert(head.getRightChild(),node))
导致
head.setRightChild(node)
在大多数情况下返回
head
。无论何时返回
head
head.setLeftChild(insert(head.getLeftChild(),node))
都会产生
head.setLeftChild(head.getLeftChild())
head.setRightChild(insert(head.getRightChild(),node))
的结果是
head.setRightChild(head.getRightChild())
。i、 e.在大多数情况下,对
setLeftChild
setRightChild
的调用不会更改当前
头的左/右子节点

只有当
insert(head.getLeftChild(),node)
insert(head.getRightChild(),node))
被传递
null
值时(即
head.getLeftChild()
head.getRightChild()
null
),递归调用才会返回新的
节点
节点
,这导致
head.setLeftChild(insert(head.getLeftChild(),node))
产生
head.setLeftChild(node)
head.setRightChild(insert(head.getRightChild(),node))
产生
head.setRightChild(node)
我们这里有一个插入函数

该函数将两个节点作为参数:
head
是二叉树的根,
node
是插入其中的新节点

新的
节点
将以这样一种方式插入,即树的某个节点将产生一个递增的整数序列

为什么这个递归函数只设置head的子函数一次

它设置从根节点到递归结束时插入节点位置的路径上的所有树节点。不过,只有第一个赋值有意义,因为所有其他赋值都只是设置了相同的节点而没有更改

为什么这个递归函数不将所有的左子级或右子级设置为节点,即使它是递归函数

此递归中函数的每次调用都会设置左、右或无子级。如果仔细跟踪执行,您将看到在树中的哪个位置设置了哪个子级

为什么这个递归不将null的子节点设置为节点

如果
头的值为
null
,则阻止对该头进行任何操作-它将要插入的
节点
返回到实际插入发生的上一个递归调用。

我们这里有一个插入函数

该函数将两个节点作为参数:
head
是二叉树的根,
node
是插入其中的新节点

新的
节点
将以这样一种方式插入,即树的某个节点将产生一个递增的整数序列

为什么这个递归函数只设置head的子函数一次

它设置从根节点到递归结束时插入节点位置的路径上的所有树节点。不过,只有第一个赋值有意义,因为所有其他赋值都只是设置了相同的节点而没有更改

为什么这个递归函数不将所有的左子级或右子级设置为节点,即使它是递归函数

此递归中函数的每次调用都会设置左、右或无子级。如果仔细跟踪执行,您将看到在树中的哪个位置设置了哪个子级

为什么这个递归不将null的子节点设置为节点


如果
头的值为
null
,则禁止对其执行任何操作-它将要插入的
节点
返回到实际插入发生的上一个递归调用。

如何
null
有头或子节点?是的,我明白了。所以在递归函数中,如果我们想要执行某个东西,而它不能执行,我们就继续执行堆栈的下一个并执行它?我只是想核实一下我的身份