[LeetCode] 95. Unique Binary Search Trees II & I
2017-02-27 00:10
344 查看
[LeetCode] 95. Unique Binary Search Trees II & I
Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.For example,
Given n = 3, your program should return all 5 unique BST’s shown below.
每次把数组分成两半,然后递归构造树。
class Solution { public: vector<TreeNode*> helper(vector<int> vals) { int len = vals.size(); if (len == 0) return vector<TreeNode*>(1, NULL); vector<TreeNode*> res; for (int i=0; i<len; ++i) { vector<int> leftv; vector<int> rightv; for (int j=0; j<i; ++j) { leftv.push_back(vals[j]); } for (int j=i+1; j<len; ++j) { rightv.push_back(vals[j]); } vector<TreeNode*> lroot = helper(leftv); vector<TreeNode*> rroot = helper(rightv); for (int il=0; il<lroot.size(); ++il) { for (int ir=0; ir<rroot.size(); ++ir) { TreeNode* now = new TreeNode(vals[i]); now->left = lroot[il]; now->right = rroot[ir]; res.push_back(now); } } } return res; } vector<TreeNode*> generateTrees(int n) { if (n == 0) return vector<TreeNode*>(0); vector<int> vals(n, 0); for (int i=0; i<n; ++i) { vals[i] = i+1; } return helper(vals); } };
当实现了II的时候,发现I的那题原来就是一个卡特兰数。
catalan
= c[1]*c[n-1] + c[2]*c[n-2] + … + c[n-1]*c[1]。
class Solution { public: int numTrees(int n) { vector<int> catalan(n+1, 0); catalan[0] = 1; catalan[1] = 1; for (int i=2; i<=n; ++i) { for (int j=0; j<i; ++j) { catalan[i] += catalan[j] * catalan[i-j-1]; } } return catalan ; } };
相关文章推荐
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- LeetCode 95.Unique Binary Search Trees II
- ***LeetCode 95. Unique Binary Search Trees II
- LeetCode之“动态规划”:Unique Binary Search Trees && Unique Binary Search Trees II
- [Leetcode]Unique Binary Search Trees I & II
- [leetcode]95. Unique Binary Search Trees II
- 【LeetCode】Unique Binary Search Trees I && II
- Leetcode: 95. Unique Binary Search Trees II
- [LeetCode]95. Unique Binary Search Trees II(DP,二叉树)
- LeetCode --- 95. Unique Binary Search Trees II
- 【LeetCode】95. Unique Binary Search Trees II
- leetcode 95. Unique Binary Search Trees II
- LeetCode *** 95. Unique Binary Search Trees II
- LeetCode力扣之95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II(唯一二叉搜索树)
- [LeetCode]Unique Binary Search Trees I&II
- leetcode -- Unique Binary Search Trees I&II -- 重点
- LeetCode 95. Unique Binary Search Trees II
- LeetCode-95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II