二进制搜索进入无限循环

时间:2016-12-12 18:07:26

标签: java data-structures binary-search-tree

我想进行二分搜索,但程序正在进入无限循环。 该程序打印:

  

值= 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;
    }
}

2 个答案:

答案 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);
}