ここに示されている方法を使用する: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)ですか?