C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用して指定された高さのAVLツリー内のノードの最小数。


問題の説明

AVLツリーの高さを考えると、タスクはツリーが持つことができるノードの最小数を見つけることです。

If height = 0 then AVL tree can have one 1 node
If height = 5 then AVL tree can have minimum 20 nodes

アルゴリズム

AVLツリーでは、高さのバランスプロパティを維持する必要があります。つまり、左右のサブツリーの高さの差は、ノードごとに-1、0、または1を超えることはできません。このプロパティを使用して、以下の漸化式を作成できます-

1. If height = 0 then return 1
2. If height = 1 then return 2
3. If height > 1 then return (1 + getMinAVLNodes(h – 1) + getMinAVLNodes(h – 2))

#include <iostream>
using namespace std;
int getMinAVLNodes(int h){
   if (h < 0) {
      return 0;
   }
   if (h == 0 || h == 1) {
      return h + 1;
   }
   return 1 + getMinAVLNodes(h - 1) + getMinAVLNodes(h -2);
}
int main(){
   int h = 5;
   cout << "Minimum nodes for " << h << " height = " << getMinAVLNodes(h) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum nodes for 5 height = 20

  1. C++を使用してNを25で割り切れるのに必要な所定の移動の最小数。

    問題の説明 先行ゼロのない数値Nが与えられます。タスクは、Nを25で割り切れるのに必要な最小移動数を見つけることです。各移動で、隣接する2桁を入れ替えて、いつでも数値に先行ゼロが含まれていないことを確認できます。 Nを25で割り切れない場合は、-1を出力します N =5071の場合、25で割り切れるには4回の移動が必要です 5071 → 5701 → 7501 → 7510 → 7150 アルゴリズム 1. Iterate over all pairs of digits in the number. Let the first digit in t

  2. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<