【发布时间】:2018-01-11 18:33:39
【问题描述】:
我知道递归会一直执行,直到满足基本情况。
但是,为什么这个递归函数只设置了一次head的孩子呢?
当head变为null时,它返回节点并将head的左孩子或右孩子设置为节点。
我明白了这个概念,但是为什么即使它是递归函数,这个递归函数也不会将所有左孩子或右孩子都设置为节点?
还有一个问题,这个递归在head为null的时候就停止了,但是为什么这个递归不把null的孩子设置为节点呢?此递归将 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;
}
【问题讨论】:
-
null怎么有头有子? -
是的,我明白了,马特。所以在递归函数中,如果我们想要执行某些东西,如果它无法执行,我们就进入堆栈的下一个并执行它?我只是想验证我的假设。
-
仔细阅读你的源代码,原因很明显,如果你仍然看不到,“分析”
if块,问题就在那里 -
@Dummy 这对我来说并不明显。你为什么不发布完整的答案?
-
我希望你自己弄清楚,但如果你坚持,那就是,当空检查为真时,你永远不会将
head设置为任何东西,所以无论如何它总是null