1

私はBST(二分探索木)の作成に取り組んでおり、私が読んでいる本の中にこのコードを与える例があります

public int height() {
    return height(root);
}

private int height(BinaryNode<E> node) {
    if (node == null) {
        return 0;
    } else {
        int leftHeight = height(node.left);
        int rightHeight = height(node.right);

        if (leftHeight < rightHeight) {
            return 1 + rightHeight;
        } else {
            return 1 + leftHeight;
        }
    }
}

しかし、2 つの別々の高さの方法がある理由についての説明情報はありません。したがって、これら 2 つの方法を 1 つの高さの方法にマージすることが可能かどうかを皆さんに尋ねています。そうでない場合、可能ですか。なぜだめですか?

ボブ、可能な限りの助けに感謝します。

4

3 に答える 3

1

メソッドのオーバーロードの例です。
同じ名前のメソッドが 2 つありますが、渡される引数の型の数が異なります。

最初のメソッドにはパラメーターがなく、2 番目のメソッドには type のパラメーターが 1 つありますBinaryNode<E>
最初のメソッドが呼び出されると、root変数を渡す 2 番目のメソッドが呼び出されます (これは type であると想定していますBinaryNode<E>)。

1 つ目は public であるため、他のクラスから呼び出すことができます。2 つ目は private で、定義されているクラスからのみ呼び出すことができます。

于 2013-02-22T09:34:13.330 に答える
1

あなたが提供したメソッドがツリークラスの一部であると仮定すると、それらをマージする方法がわかりません。1 つ目は引数を必要としない public メソッドで、2 つ目は特定のノードの高さをチェックするヘルパー再帰メソッドです。1 つ目は 2 つ目を使用します。ルート自体でヘルパー メソッドを呼び出します。2 番目の方法は外部から見えないようにするため、非公開です。

高さメソッドが Node レベルで実装されている場合、引数なしの単一の再帰メソッドで実行できます。

于 2013-02-22T09:36:50.610 に答える
0

int height()メソッドがpublicであることに注意してください。これは、クラスの外から呼び出されるものです。木の高さを決定する必要があります。他のものを呼び出すことでこれを行います。

サブツリーの高さを決定するメソッドによってのみ使用されるため、int height(BinaryNode<E> node)プライベートであることも参照してください。public int height()

于 2013-02-22T09:51:43.520 に答える