私は昨日この質問をしましたが、私はまだ完全に紛失し混乱しています。バイナリ検索ツリーの差分キー
/**
* A wrapper method for a method that computes the
* sum of the differential keys of this binary search tree.
* @return the sum of the differential keys of this tree.
*/
@Override
public int sigma()
{
if (size == 0)
return 0;
if (root.data.getClass() != Integer.class)
throw new IllegalArgumentException("Keys must be integers");
return (Integer)root.data + sigma(root);
}
/**
* An auxiliary method that recursively computes the sum of
* differential keys in the subtrees of the tree rooted at
* the specified key.
* @param subtreeRoot the root of a subtree of this tree
* @return the sum of the differential keys of the left and
* right subtrees
*/
private int sigma(Node subtreeRoot)
{
// My attempt at implementing the auxiliary method
if(subtreeRoot == null) return 0;
return sigma(subtreeRoot.left) - (Integer)subtreeRoot.data +
sigma(subtreeRoot.right) - (Integer)subtreeRoot.data;
}
注:我々は、いずれかのメソッドにパラメータを追加することはできませんか、コードを変更私は2つの方法で、ラッパー・メソッドと以下のように定義されたsigma()
という名前の再帰的な補助方法を、記述しようとしていますラッパーメソッドの内部
キー微分の定義:ノードがある場合の要素整数であるバイナリツリー内のノードの
定義1.差分キーは、ノードの要素である ルートまたはノード内の要素と親の 親の間の違いです。 ヌルノードの差動Iは、基本ケース、
if(subtreeRoot == null) return 0;
をカバーしている0
ですが、その後、私は混乱しています。ここ メソッドが何をすべきかの例である:
補助方法はBSTに全ての差分キーの和の値を返すべきである(-1この例では)、次いで、ラッパー・メソッドはそれを追加します値をルートノードの値(この例では10)に設定します。したがって、差分キーとsigma()によって返される値の合計は10 +(-1)= 9です。
私が抱えている主な問題は、補助的な方法で再帰的なソリューションを実装することです。私は紙に簡単に解決策をトレースすることができますが、私は私のプロジェクトにこれを実装するように見えることはできません。私はこれについてオンラインでリソースを見つけることができず、私の教授はほとんど役に立たない。補助的なメソッドを実装しようとする試みは上記のコードに含まれています。どんな助けもありがとうございます。
の元の値を返し、メインアプローチは、各反復維持において、ダウンノードへのルートから移動すること
}
注親ノードのトラック。この方法でノードに到達すると、親のノードは何か分かります。そこから微分を直接計算する –
ルートノードはラッパーメソッドのreturnステートメントの補助メソッドに渡されるので、 'subtreeRoot.left'と' subtreeRoot.right'はルートノード。ルートの後に親ノードをどのように追跡するでしょうか?私はクラスで定義されたメソッド、 'private Node findParent(Node node)'を持っています。それを変数に割り当てることはできますか? @aimee –