Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?
For example,
Given n = 3, there are a total of 5 unique BST’s.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
对于本题中的BST(二分搜索树)的定义:
对于任一个节点(root 父节点),其左子树小于root,右子树大于root。
因此我们要做的就是找出相应的规律:
对于n=0时,f(0)=1;即是空树
n=1时,f(1)=1;即是只有一个节点的树;
对于n=2,我们可以分析1,2分别作为root 时的树的个数的和,
比如,以1为根的树的个数,等于左子树的个数乘以右子树的个数,左子树是0个元素的树,
右子树是2个元素的树。以2为根的树的个数,等于左子树的个数乘以右子树的个数,
左子树是1个元素的树,右子树也是1个元素的树。依此类推
所以;f(2)=f(0)*f(1)+f(1)*f(0);
f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(0)
.............观察可得:
![]()
所以程序如下:
# include <iostream> # include <vector> using namespace std; class Solution { public: int TreeNum(int n) { vector<int>f(n + 1, 0); f[0] = 1; f[1] = 1; for (int i = 2; i <= n; i++) { for (int k = 1; k <= i; k++) f[i] += f[k - 1] * f[i - k]; } return f[n]; } }; int main() { Solution s1; int n; cout << "请输入整数n: "; cin >> n; cout << s1.TreeNum(n) << endl; system("pause"); return 0; }