0

如果对于 T 中的每个节点 m,二叉树 T 是半平衡的:

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/32*n/3,因为这些值满足条件R(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 回答