Java递归仅在不为null时返回

时间:2014-11-17 04:37:41

标签: java recursion

这是纯粹的游戏和乐趣我从头开始编写二进制搜索树我想使用递归函数,在树中搜索给定值,现在它只是一个int但后来我想返回一个对象。如果值为null则返回null,因此当我调用SearchTree函数时,它将在返回实际值之前返回null。解决这个问题的唯一方法是返回一个匹配值的数组是否有更优雅的方式?

public class BinaryNode implements BaseNode{
    private BinaryNode right;
    private BinaryNode left;
    private int data;
    //...

    public BinaryNode traverseTree(int Data){
    if (getData() == Data){
        return this;
    }
    else if (Data < getData() && getLeft() != null){
        getLeft().traverseTree(Data);
    }
    else if(Data > getData() && getRight() != null){
        getRight().traverseTree(Data);
    }
    return null;
}

2 个答案:

答案 0 :(得分:0)

您需要从递归调用中返回值。

试试这个:

public class BinaryNode implements BaseNode{
    private BinaryNode right;
    private BinaryNode left;
    private int data;
    //...

    public BinaryNode traverseTree(int Data){
    if (getData() == Data){
        return this;
    }
    else if (Data < getData() && getLeft() != null){
        return getLeft().traverseTree(Data);
    }
    else if(Data > getData() && getRight() != null){
        return getRight().traverseTree(Data);
    }
    return null;
}

答案 1 :(得分:0)

你应该接受ShroudedKnife的回答但风格上我会写得像:

public class BinaryNode implements BaseNode{
    private BinaryNode right;
    private BinaryNode left;
    private int data;
    //...

    public BinaryNode traverseTree(int Data){
        final BinaryNode rvalue;
        if (getData() == Data){
            rvalue = this;
        }
        else if (Data < getData() && getLeft() != null){
            rvalue = getLeft().traverseTree(Data);
        }
        else if(Data > getData() && getRight() != null){
            rvalue = getRight().traverseTree(Data);
        }
        else {
            rvalue = null;
        }
        return rvalue;
    }
}

我更喜欢只有一个return语句,而且上面看起来更像let FP模式匹配(final BinaryNode将需要设置变量,因此它几乎形成一个表达式。

此外,您应该知道这称为增强递归或头递归。在大多数FP语言中,尾递归是首选,因为编译器/运行时会对其进行优化。