Unique Binary Search Trees (leetcode)
2014-10-29 21:40
274 查看
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.
使用动态规划的方法解决:
用tree_num保存n个节点的二叉树个数,对于n个节点的二叉树,有如下公式
tree_num
= tree_num[0] * tree_num[n - 1] + tree_num[1] * tree_num[n - 2] + ...+ tree_num[n-2] * tree_num[1] + tree_num[n - 1] *tree_num[0]
1> 使用数组tree_num[] 保存n个节点的二叉树个数,依次计算 tree_num[1], tree_num[2], tree_num[3] ..... tree_num
的二叉树个数:
最后删除数组 tree_num, 返回结果。
时间复杂度 O(n * n)
空间复杂度 O(n)
2> 使用 vector 代替 tree_num[] 数组.
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 3https://oj.leetcode.com/problems/unique-binary-search-trees/
使用动态规划的方法解决:
用tree_num保存n个节点的二叉树个数,对于n个节点的二叉树,有如下公式
tree_num
= tree_num[0] * tree_num[n - 1] + tree_num[1] * tree_num[n - 2] + ...+ tree_num[n-2] * tree_num[1] + tree_num[n - 1] *tree_num[0]
1> 使用数组tree_num[] 保存n个节点的二叉树个数,依次计算 tree_num[1], tree_num[2], tree_num[3] ..... tree_num
的二叉树个数:
最后删除数组 tree_num, 返回结果。
时间复杂度 O(n * n)
空间复杂度 O(n)
class Solution { public: int numTrees(int n) { //tree_num = tree_num[0] * tree_num[n - 1] + tree_num[1] * tree_num[n - 2] + ...+ // tree_num[n-2] * tree_num[1] + tree_num[n - 1] *tree_num[0] if (n < 3) { return n; } int *tree_num = new int[n + 1]; tree_num[0] = 1; tree_num[1] = 1; tree_num[2] = 2; for (int i = 3; i <= n; ++i) { tree_num[i] = 0; for (int j = 0; j < i; ++j) { tree_num[i] += tree_num[j] * tree_num[i - 1 - j]; } } int retval = tree_num ; delete [] tree_num; return retval; } };
2> 使用 vector 代替 tree_num[] 数组.
class Solution { public: int numTrees(int n) { //tree_num = tree_num[0] * tree_num[n - 1] + tree_num[1] * tree_num[n - 2] + ...+ // tree_num[n-2] * tree_num[1] + tree_num[n - 1] *tree_num[0] if (n < 3) { return n; } std::vector<int> tree_num(n + 1, 0); // n + 1 ints with value 0 tree_num[0] = 1; // with zero node tree_num[1] = 1; // with one node tree_num[2] = 2; // with two nodes for (int i = 3; i <= n; ++i) { for (int j = 0; j < i; ++j) { tree_num[i] += tree_num[j] * tree_num[i - 1 - j]; } } return tree_num ; } };
相关文章推荐
- LeetCode - Unique Binary Search Trees II
- LeetCode--Unique Binary Search Trees
- LeetCode(96) Unique Binary Search Trees
- Leetcode Unique Binary Search Trees
- leetcode 95. Unique Binary Search Trees II | Java最短代码实现
- leetcode -- Unique Binary Search Trees II
- leetcode 95 Unique Binary Search Trees II
- Leetcode-Unique Binary Search Trees
- 【Leetcode】Unique Binary Search Trees
- LeetCode(95) Unique Binary Search Trees II
- Leetcode: Unique Binary Search Trees II
- leetcode[95] Unique Binary Search Trees II
- leetCode(26):Unique Binary Search Trees
- leetcode--Unique Binary Search Trees
- LeetCode: Unique Binary Search Trees I & II
- [Leetcode] Unique binary search trees 唯一二叉搜索树
- 95. Unique Binary Search Trees II ,leetcode
- [LeetCode]Unique Binary Search Trees@python
- [leetcode]Unique Binary Search Trees @ Python
- 【Leetcode】Unique Binary Search Trees