递归搜索二叉树

时间:2016-04-10 06:35:15

标签: java recursion tree lookup

您好,我无法正常使用此代码。当它一直沿着树的最左边缘递归时,它似乎跳出了堆栈。我似乎无法想出这个。

public static Node lookup(Node node, int lookupValue) {

        if (node == null)  {
            return null;
        } else {
            if (node.value == lookupValue) {
                System.out.println("Found");
                return node;
            } else if(node.left != null) {
                return lookup(node.left, lookupValue);

            } else if(node.right != null) {
                return lookup(node.right, lookupValue);
            } else {
                return null;
            }
        }
}

2 个答案:

答案 0 :(得分:2)

您返回从左子树(如果存在)返回的任何内容,而不检查正确的子树。 else块中有return语句时,不需要进行大量if分支。改变如下:

public static Node lookup(Node node, int lookupValue) {
    if (node == null)
        return null;
    if (node.value == lookupValue)
        // System.out.println("Found");
        return node;
    Node rval = lookup(node.left, lookupValue);
    // only return if found in left sub-tree
    return (rval != null) ? rval : lookup(node.right, lookupValue);
}

答案 1 :(得分:0)

你的else if不正确你每次都要检查左右:

if (node == null) return null;
if (node.value == lookupValue) {
    System.out.println("Found");
    return node;
}
Node found = lookup(node.left, lookupValue);
if(found != null) {
    return found;
}
return lookup(node.right, lookupValue);