ここに示されている方法を使用する:http://cslibrary.stanford.edu/110/BinaryTrees.html#java
12. countTrees()ソリューション(Java)
/ **
キー値1...numKeysの場合、構造的に一意な数
それらのキーを格納する二分探索木は可能ですか?
戦略:各値がルートになる可能性があることを考慮してください。
左右のサブツリーのサイズを再帰的に見つけます。
* /
public static int countTrees(int numKeys){
if(numKeys <= 1){
return(1);
}
そうしないと {
//ルートに1つの値があり、残りは何でも
//左右にそれぞれ独自のサブツリーを形成します。
//ルートになる可能性のあるすべての値を繰り返し処理します...
int sum = 0;
int左、右、ルート;
for(root = 1; root <= numKeys; root ++){
左=countTrees(root-1);
right = countTrees(numKeys-root);
//このルートを持つ可能なツリーの数==left* right
合計+=左*右;
}
return(sum);
}
}
n(n-1)(n-2)... 1、つまりn!
メモ化ツールを使用する場合、複雑さはO(n)ですか?
