为什么它在我的二叉搜索树中搜索方法返回null

时间:2017-04-08 16:57:30

标签: data-structures binary-search-tree

我不知道为什么我的方法会变空?

public Node<E> search(int data, Node<E> start){
    Node<E> foundNode = null;

    if(data < start.getData()){
        search(data, start.getLeftNode());
    }

    if(data > start.getData()){
        search(data, start.getRightNode());
    }

    if(data == start.getData()){
        foundNode = start;
    }

    return foundNode;

}

如果我在return语句之前放置System.out.println(foundNode);我得到节点但是当它返回它时我得到null !!

2 个答案:

答案 0 :(得分:0)

这是我的方法:

private Node search(String name, Node node){
    if(node != null){
        if(node.name().equals(name)){
           return node;
        } else {
            Node foundNode = search(name, node.left);
            if(foundNode == null) {
                foundNode = search(name, node.right);
            }
            return foundNode;
         }
    } else {
        return null;
    }
}

答案 1 :(得分:0)

您缺少递归函数调用的return语句: search(data,start.getLeftNode());search(data, start.getRightNode());

只有当没有执行递归调用时,您的方法才会起作用,并且如果它们被执行,则返回的foundNode仍为NULL,因为它是一个局部变量。

所以,正确的代码是:

public Node<E> search(int data, Node<E> start){
Node<E> foundNode = null;

if(data < start.getData()){
    return search(data, start.getLeftNode());
}

if(data > start.getData()){
    return search(data, start.getRightNode());
}

if(data == start.getData()){
    foundNode = start;
}
return foundNode;

}