0

二分木 T は、T のすべてのノード m に対して次の場合、半平衡です。

R(m)/2 <= L(m) <= 2*R(m)、

ここで、L(m) は m の左サブツリーのノード数、R(m) は m の右サブツリーのノード数です。

(a) N 個のノードを持つ半平衡二分木の数を数える再帰関係を書きます。

(b) (a) の再帰を計算するための動的計画法のアルゴリズムを提供します。

このための再帰関係を作成するにはどうすればよいですか?

以下は該当しますか?

if(node==NULL)
return;
if(given relation is true)
count++
else find for right tree;
     find for left tree;

彼は関数か何かのような再帰関係をもっと求めていると思います.?

また、動的計画法を使用して問題を解決するにはどうすればよいですか? 上記の提案されたコード スニペットを適用する場合、何も保存する必要はないと思います。

親切に助けてください。

4

1 に答える 1

0

ヒント:ノードC(n)を持つ半バランス ツリーの数としnます。の値がわかっている場合は、ルート ノードを取得し、残りのノードを条件によって左右のサブツリーに分割C(1), C(2), ..., C(n)することで簡単に計算できます。C(n+1)n

これらの値は条件 を満たすため、サブツリー内のノードの数は からn/3までです。2*n/3R(n)/2 <= L(n) <= 2*R(n)

アップデート:

C(n) = sum from n/3 to 2n/3 L(n)*R(n)

于 2011-11-10T20:09:11.360 に答える