问题描述
我最近被要求在一次采访中告诉我们在没有n个未标记节点的情况下可能发生的BST。但是我无法理解BST中未标记节点的意义,因此无法正确回答。该问题的适当答案应该是什么?
解决方法
的确,当我看到带有未标记节点的BST时,我也会感到惊讶。 BST仅在节点携带信息时才有意义。
我想它们只是指二叉树。对于这个计数问题,您似乎已经通过添加catalan
标签来回答了这个问题。
如果我们将 C n 称为可以通过 n 节点生成的二叉树的数量,则可以将问题分解为根子树的可能性。首先,当所有非根节点都在左子树中时,计算树的数量;然后当其中一个实际上在右子树中时,…etc,然后将所有这些计数合计。
- C 0 = 1
- C n + 1 = ∑ i = 0..n C i C ni
...,这正是给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
使用备忘录可以提高效率。