1

これは二分探索木ではなく、厳密な規則には従いません。

唯一の規則は、各ノードが正の整数であり、各ノードが子を持たないか、左に 1 つ、または 2 つの子を持つことができるということです。(ちょうどいい子ではありません)。

再帰を使用してツリー全体を横断し、終了時に見つけた最小値を返したいと思います。

メソッドのシグネチャを変更したり、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 に答える