题目:假设序列为{1,3, 5, 6, 7},问由该序列可以生成多少种二叉搜索树。
思路:遇到这种题,可以通过找规律的方式来求解。
A 只有一个节点时,显然只有一种。
B 有两个节点时,有2种,如图所示:
C 当有3个节点时,我们可以把每个节点作为跟节点,得到如下几种情况:
从上面3个例子我们可以找到规律:假设f(n)表示含有n个元素的递增序列所构成的二叉搜索树的个数,则有:
f(0) = 1;
f(1) = 1;
f(2) = f(0) * f(1) + f(1) *f(0) = 2;
f(3) = f(0) * f(2) + f(1) * f(1) + f(2) * f(0) = 5;
。
。
。
f(n) = f(0) * f(n-1)+ f(1) * f(n-2) + … + f(n - 1) * f(0)。
所以有:f(4) = 14, f(5) = 42。所以该递增序列可以构成42种二叉搜索树。