没有 n 个未标记节点的 BST 可能

No of BST possible with n unlabelled nodes

我最近在一次采访中被要求说出 n 个未标记节点的 BST 的可能性。但是我无法理解 BST 中未标记节点的意义,无法正确回答。这个问题的正确答案应该是什么?

事实上,当我看到带有未标记节点的 BST 时,我也会感到惊讶。 BST 只有在节点携带信息时才有意义。

我想他们只是指二叉树。对于那个计数问题,您似乎已经通过添加 catalan 标签回答了这个问题。

如果我们调用Cn可以用n[=41=生成的二叉树的数量] 节点,那么我们可以将问题分解为根的 子树 的可能性。当所有 non-root 个节点都在左子树中时,首先计算树的数量,然后当其中一个节点实际上在右子树中时,...等等,然后将所有这些计数相加。

  • C0 = 1
  • Cn+1 = ∑i=0..nCi Cn-i

... 这正是 Catalan numbers.

给出的递归关系

而且把这个写成递归函数也不难(伪代码):

CountBT(n):
    if n == 0:
        return 1 
    total = 0
    for i = 0 to n:
        total = total + CountBT(i) * CountBT(n - i)
    return total

使用记忆化可以提高效率。