我正在尝试编写一个布尔递归方法,将值插入二叉搜索树。如果该值尚未存在,则返回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;
}
答案 0 :(得分:1)
像这样改变:
private Node insert(int value, Node current) {
if(current.data == value){
return current;
}else if(current.left != null && current.left.data > value){
return insert(value,current.left);
}else if(current.right != null && current.right.data < value){
return insert(value,current.right);
}else{
if(current.data > value){
current.left = new Node(value);
}else{
current.right = new Node(value);
}
return null;
}
}
如果节点尚未存在,则将插入具有给定值的节点并返回null。否则,将返回一个节点,表明节点已经存在。
答案 1 :(得分:0)
我认为它可能像
最初使用insert(value, root, null)
public boolean insert(int value, Node currentNode, Node parentNode) {
if(currentNode == null) { //Node not present, hence insert
Node valueNode = new Node(value);
if(parentNode != null && parentNode.value > value) { //link to the parent node
parentNode.left = valueNode;
} else if(parentNode != null && parentNode.value < value){
parentNode.right = valueNode;
}
return true;
} else if(currentNode.value = value) { //Node present
return false;
} else if(value > currentNode.value) { //Now check the same in right side of the tree
return insert(value, currentNode.right, currentNode);
} else if(value < currentNode.value) { //Now check the left side of the tree
return insert(value, currentNode.left, currentNode);
}
}