Unique Binary Search Trees - LeetCode 96
2015-05-23 19:52
519 查看
题目描述:
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
Hide Tags Tree Dynamic Programming
分析:
动态规划:对于动态规划类型的题目,最重要的就是找到递推公式。该题要求含有1到n,n个整数的二叉搜索树的个数。首先二叉搜索树的特征是根节点大于其左子树的
所有节点,但小于右子树的所以节点。当根为 i 时,其左子树的的节点个数为i-1,右子树的个数为n-i,此时,以i为根不同的二叉搜索树的个数为左右子数的不同二叉
树的个数的乘积。我们先看看前面几个n的不同二叉搜索的的个数u。
当n = 0,不含有任何节点,是一个空树二叉搜索树,u[0] = 1;
当n = 1,只有一个节点,只有一种结构,u[1] = 1;
当n = 2,有两个节点,其中根节点的选择可以是1和2,当根为1时,左孩子为空,右孩子为2;当根为2时左孩子为1,右孩子为空,
于是可以得出u[2] = u[0] * u[1] + u[1]*u[0];
同理当n为3时,不同的二叉搜索树的总数为
u[3] = u[0]*u[2] //以1为根节点时的不同二叉搜索树数目
+ u[1]*u[1] //以2为根节点时的不同二叉搜索树数目
+ u[2]*u[0]; //以3为根节点时的不同二叉搜索树数目。
于是可以得出以下递推公式:
u[i] = 求和{u[j] * u[i-j-1]},其中0<=j<i
以下是C++实现代码,附带注释:
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
Hide Tags Tree Dynamic Programming
分析:
动态规划:对于动态规划类型的题目,最重要的就是找到递推公式。该题要求含有1到n,n个整数的二叉搜索树的个数。首先二叉搜索树的特征是根节点大于其左子树的
所有节点,但小于右子树的所以节点。当根为 i 时,其左子树的的节点个数为i-1,右子树的个数为n-i,此时,以i为根不同的二叉搜索树的个数为左右子数的不同二叉
树的个数的乘积。我们先看看前面几个n的不同二叉搜索的的个数u。
当n = 0,不含有任何节点,是一个空树二叉搜索树,u[0] = 1;
当n = 1,只有一个节点,只有一种结构,u[1] = 1;
当n = 2,有两个节点,其中根节点的选择可以是1和2,当根为1时,左孩子为空,右孩子为2;当根为2时左孩子为1,右孩子为空,
于是可以得出u[2] = u[0] * u[1] + u[1]*u[0];
同理当n为3时,不同的二叉搜索树的总数为
u[3] = u[0]*u[2] //以1为根节点时的不同二叉搜索树数目
+ u[1]*u[1] //以2为根节点时的不同二叉搜索树数目
+ u[2]*u[0]; //以3为根节点时的不同二叉搜索树数目。
于是可以得出以下递推公式:
u[i] = 求和{u[j] * u[i-j-1]},其中0<=j<i
以下是C++实现代码,附带注释:
/*///////////////0ms//////////////*/ class Solution { public: int numTrees(int n) { vector<int> vec(n+1,0); vec[0] = 1; vec[1] = 1; for(int i = 2; i< n+1; i++) //求有i个节点的二叉树的不同二叉搜索树总数。 { vec[i] = 0; for(int j = 0; j < i; j++) //求出以i为根节点的不同二叉搜索树的总数 { vec[i] += vec[j] * vec[i-1-j];//求以i为根,左子树为0个节点,右子树为i-1-j个结点的不同二叉搜索树的总数 } } return vec ; } };
相关文章推荐
- 【leetcode】【96】Unique Binary Search Trees
- LeetCode 96:Unique Binary Search Trees
- [LeetCode]: 96: Unique Binary Search Trees
- LeetCode_96 Unique Binary Search Trees
- Leetcode 96 Unique Binary Search Trees
- DP问题:leetcode(96) Unique Binary Search Trees
- Leetcode 96 Unique Binary Search Trees(独一的二叉搜索树)
- [leetcode 96]Unique Binary Search Trees
- leetcode——96——Unique Binary Search Trees
- Leetcode:96. Unique Binary Search Trees
- LeetCode 96:Unique Binary Search Trees
- [leetcode 96]Unique Binary Search Trees--二叉搜索树的个数问题。
- Leetcode[96]-Unique Binary Search Trees
- 【leetcode】Unique Binary Search Trees (#96)
- [Leetcode 75] 96 Unique Binary Search Trees
- leetcode || 96、Unique Binary Search Trees
- LeetCode(96)Unique Binary Search Trees
- [Leetcode] - 96 Unique Binary Search Trees
- LeetCode(96) Unique Binary Search Trees
- leetcode:96. Unique Binary Search Trees