【问题标题】:Variation of finding the number of binary trees for a given n number of keys查找给定 n 个键的二叉树数量的变体
【发布时间】:2012-04-01 23:52:39
【问题描述】:

给定 An 不同键的列表,可以形成多少个二叉搜索树,使得 任何子树,其左右子树的节点数之差为 最多一个?

二叉搜索树个数的递归关系没有条件是

f(1) = f(0) = 1;
Let total_trees = 0;
for(int i = 1; i<= n; ++i)
   total_trees += f(i-1) * f(n-i)

谁能帮忙修改一下?

我的尝试(这是错误的):

f(1) = f(0) = 1;
Let total_trees = 0;
for(int i = 1; i<= n; ++i)
   total_trees += f(i) * f(i-1)

【问题讨论】:

  • 如果这是作业,请相应标记。
  • @Adam 这不是作业。我正在准备考试。如有必要,我将提供一个链接,说明此问题是为了练习。
  • 到目前为止你发现了什么?

标签: algorithm binary-tree combinations


【解决方案1】:

让我们所有的键都在线性数组中。 如果键的数量是偶数,则您有 2 个根变体 - 2 个中心元素。 对于奇数个键,只有一个以中心元素为根的变体来满足条件。所以递归看起来像:

f(1) = f(0) = 1

f(2*k) = f(k-1) * f(k+1) + f(k+1) * f(k-1) = 2 * f(k-1) * f(k +1)

f(2*k+1) = f(k)*f(k)

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2014-03-22
    • 2016-04-29
    • 2011-03-10
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2015-10-31
    • 2015-10-07
    相关资源
    最近更新 更多