フル バイナリ ツリーは、すべての親ノードが 2 つの子ノードを持つか、子ノードを持たない特殊なタイプのバイナリ ツリーです。データ構造では、これらのタイプのツリーはバランスが取れており、組織化された表現であると考えられます。完全なバイナリ ツリーには、各親ノードがその子の積であるという固有の特性がある場合があります。
この記事では、C を使用して各ノードがその子の積になるように完全なバイナリ ツリーの数を計算するさまざまな方法について説明します。
たとえば、配列 {1, 5, 3, 4} には、単一ノード 1 (1 x 1)、5 (1 x 5)、3 (1 x 3)、および 4 (1 x) が 4 つだけあります。 4 ).
リーリー指定された配列で、最大値未満の各要素の倍数をすべて使用すると、配列内に倍数がある場合、完全なバイナリ ツリーを作成できます。したがって、配列内の最大値を見つけます。
配列内の小さい値が大きい値の倍数である可能性があることがわかっているため、最小値から最大値まで反復してそのようなバイナリ ツリーを見つけることから始めます。
ここでは、動的プログラミングを使用して、各ノードがその子の積となる完全なバイナリ ツリーの数を見つけます。配列要素を反復処理し、上記の条件を満たす可能性のあるツリーを見つけます。これらの解を dp ベクトルに保存します。
まず、
次に、配列の最小値から最大値までを繰り返すネストされたループがあります。このループでは、dp ベクトルがゼロ以外であるかどうかを確認します。
dp ベクトルがゼロ以外の場合、(j j) から最大値まで j の倍数に対して別の for ループを実行します。それぞれの倍数について、複数あるかどうかを確認します。
複数ある場合、可能な完全バイナリ ツリーの数は、arr[j] 完全バイナリ ツリーの数と arr[j]/k## に等しくなります。 #。
dp 値のモジュロ 1000000007 を結果に追加します。
###結論は### 各ノードがそれ自体の子の生成となる完全なバイナリ ツリーの数を見つける方法について説明しました。この問題は、部分問題の解を dp ベクトルに保存するという動的アプローチを使用して解決します。単純なネストされた for ループを使用して、配列の最小値から最大値まで反復し、目的のプロパティを持つ完全なバイナリ ツリーの可能な数を確認できます。
以上が各ノードがその子の積である完全なバイナリ ツリーの数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。