[英]recursion method in binary search tree-java
我正在嘗試編寫將值插入二進制搜索樹的布爾型遞歸方法。 如果該值尚不存在,則返回true,然后將其插入;如果該值中已經存在該值且列表未更改,則返回false。 我認為這在大多數情況下都是有效的,但是當已經有多個值時,它無法重復返回false。 例如,如果樹已經包含3 9 6 7並且我嘗試插入3,則它是第一次返回false。 但是,當我嘗試插入9 6或7時,它總是返回true,但不應返回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;
}
像這樣更改它:
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;
}
}
如果節點不存在,則將插入具有給定值的Node並返回null。 否則,將返回一個節點,指示該節點已經存在。
我認為可能是這樣
最初使用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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.