我想进行二分搜索,但程序正在进入无限循环。 该程序打印:
值= 10
值= 10
值= 10
...
如何解决这个问题?
public static void search(Node root, int data){
while(root.data != data){
if(data < root.data){
search(root.left, data);
}
else if(data > root.data){
search(root.right, data);
}
}
System.out.println("Value = " + root.data);
}
public static void main(String[] args) {
Node root = null;
root = add(root, 15);
root = add(root, 3);
root = add(root, 10);
root = add(root, 20);
root = add(root, 30);
search(root, 10);
}
Node类:
class Node {
Node left;
int data;
Node right;
Node(int data) {
left = null;
this.data = data;
right = null;
}
}
答案 0 :(得分:1)
显然,原因是您在此root
循环中未更改 while
,因此永远循环!您可能有意走向叶节点。
while(root.data != data){ //<<<<<<root not changing
if(data < root.data){
search(root.left, data);
}
else if(data > root.data){
search(root.right, data);
}
}
答案 1 :(得分:0)
请试试这个,它应该有用。
public static void search(Node root, int data)
{
if(!root)
return;
else if(root.data == data)
{
System.out.println("Value = " + root.data);
}
else if(data < root.data)
search(root.left, data);
else
search(root.right, data);
}