我不知道为什么我需要再次分配node.left = insert(node.left, data)
,因为我已使用node = new BNode(data)
分配了它。
private BNode insert(BNode node, int data) {
if (node == null) {
node = new BNode(data);
}
else if (node.data < data) {
node.left = insert(node.left, data);
}
else if (node.data > data) {
node.right = insert(node.right, data);
}
return node;
}
答案 0 :(得分:1)
在二进制搜索树中,您必须将任何新元素放在叶子中。您的代码通过检查我们当前是否正在查看节点开始,如果是,则在此处插入我们的数据。否则我们需要继续沿着树枝走,直到我们到达一片树叶。因此,我们在左侧或右侧分支上调用此函数(取决于节点中的数字和数据)。我们这样做的方法是在node.left或node.right上调用该函数。如果孩子是null,那么我们想说现在我们的孩子就是我们刚插入的这个新节点。
如果孩子不是叶子,那么通过返回原始孩子,这项任务将不起作用。它只是通过说
来做某事node = new BNode(data);
因此前一次调用它将是唯一一个将其左或右子项更改为当前新叶,而所有其他左右孩子保持原样的方式。