Java搜索整个树的最小值

时间:2013-03-17 23:12:19

标签: java recursion tree binary-tree min

这不是二叉搜索树,也不遵循任何严格的规则。

唯一的规则是每个节点都是一个正整数,并且每个节点可以没有子节点,一个左子节点或两个子节点。 (不只是一个正确的孩子)。

我希望使用递归遍历整个树,并返回完成后找到的最小值。

如果您没有修改方法的签名或使用除Math.min()之外的任何额外方法,我将不胜感激

public static int minValue(MyNode n) {
    int root, left, right;
    int min = -1;
    if (n.obj != null) {
        root = (int) n.obj;
        left = minValue(n.left);
        right = minValue(n.right);
        if (left < right)
            min = left;
        else
            min = right;
        if (root < min)
            min = root;
    }
    return min;
}

1 个答案:

答案 0 :(得分:2)

也许问题是,对于不存在的孩子,你返回-1,但是后来你不计算这种可能性。您需要从分析中删除-1:

public static int minValue(MyNode n) {
    int root, left, right;
    int min = -1;
    if (n != null) {
        root = (int) n.obj;
        left = minValue(n.left);
        right = minValue(n.right);
        if (left > -1){
            if(right > -1){
                min = Math.min(left, right);
                min = Math.min(root, min);
            }
            else{
                min = Math.min(left, root);
            }
        }
        else{
            min = root;
        }
    }
    return min;
}