Unique Binary Tree

来源:互联网 发布:王麟 知乎什么回事 编辑:程序博客网 时间:2024/05/20 05:25

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;}


   
0 0
原创粉丝点击