96. Unique Binary Search Trees

来源:互联网 发布:罗技g502软件 编辑:程序博客网 时间:2024/05/29 04:03

Given n, how many structurally uniqueBST'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

        这个题虽然难度是中等但其实比较简单。我们可以类推一下,当n=2时,显然有两种情况。再比较n=3时,以两头元素(1 or 3)作为根时,树简化成n=2时的情况,所以状态转移方程中肯定包含2*f(n-1) 这一项。再看中间元素,由于是二叉搜索树,所以中间元素将n分成左右两颗子树,且子树情况已经求得,所以中间项的子树数目等于左右子树情况数目的乘积(如n=3时,中间元素是2,将两边分成1和1,中间元素的子树数目等于f(1)*f(1),有多个中间元素时分别计算相加即可)。

        所以状态转移方程可以表达成:f(n)=2*f(n-1)+Σ中间项子树情况;

        例如:f(5)=2*f(4)+(f(1)*f(3)+f(2)*f(2)+f(3)*f(1))=2*14+(1*5+2*2+5*1)=42。

class Solution {public:int helper(vector<int> m, int n) {int sum = 0;for (int i = 2;i < n;i++) {sum = sum + m[i - 2] * m[n - i-1];}return sum;}int numTrees(int n) {vector<int> m(n);m[0] = 1;for (int i = 1;i < n;i++) {m[i] = 2 * m[i - 1] + helper(m,i+1);}return m[n - 1];}};

0 0
原创粉丝点击