【发布时间】:2014-10-30 13:19:23
【问题描述】:
我正在尝试编写一个将值插入二叉搜索树的布尔递归方法。如果该值不存在,则返回 true 并将其插入,如果那里已经存在相同的值并且列表未更改,则返回 false。我认为这在大多数情况下都有效,但是当多个值已经存在时,它无法重复返回 false。例如,如果树已经包含 3 9 6 7 并且我尝试插入 3,它会返回 false,因为这是第一次。但是当我尝试插入 9 6 或 7 时,它总是返回 true,它不应该因为这些值已经存在。
public boolean insert(int value) {
Node travel;
travel=insert(value,root);
if (travel==null)
return false;
root=travel;
return true;
}
private Node insert(int value, Node travel) {
if (travel==null) {
travel=new Node(value);
return travel;
}
if (value>travel.data) {
travel.right=(insert(value,travel.right));
return travel;
}
if(value<travel.data) {
travel.left=(insert(value,travel.left));
return travel;
}
return null;
}
【问题讨论】:
-
代码本身看起来不错 Lori。您的树可能在第一次插入后有孤立节点,导致以后的插入返回 true。
-
@algorithmic 代码错误。假设树包含根为 3 的 3 6 9 7。当您尝试插入 6 时,如果大小写匹配,则第二个。递归调用 insert 会将 3 的右后代设置为某个值。但返回的是值为 3 的节点。
-
@User - 在第一次调用 insert(value,travel) 时,匹配第二种情况。在这种情况下,调用 insert(value, travel.right),现在返回 null。这就是从递归中出来时 travel.right 将被设置的内容。并且返回旅行将返回null。所以它确实可以正常工作,在第一个插入案例中。但是实际上并未显示插入代码。因此,不清楚第二个插入案例发生了什么变化 - 即调用 insert(9) 时。
-
@algorithmic travel 不能为空。如果它为空,则第一种情况将匹配您的意思是不显示插入代码?!它是一个递归调用,所以一切都显示出来了。
-
@user - 未显示实际插入到树中。如果这是唯一的代码并且树是预先构建的,则代码没有问题。你是什么意思旅行不能为空?如果该值既不大也不小,则达到最后一个返回“return null”。
标签: java recursion binary-search-tree