您的位置:首页 > 产品设计 > UI/UE

Unique Binary Tree

2016-03-28 11:31 375 查看
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  33 21
\ /  / / \  \
321 13  2
//\\
212  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;}};int main(){Solution s1;int n;cout << "请输入整数n: ";cin >> n;cout << s1.TreeNum(n) << endl;system("pause");return 0;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: