1

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

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

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

如果您不修改方法的签名或使用除 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;
}
4

1 回答 1

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;
}
于 2013-03-17T23:26:01.343 回答