Unique Binary Search Trees II
Q:
Given 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.
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
A:
如果使用dp,A[n]可以用到A[n-1]的结果,应该会更省空间,比如说n=4,当根节点为4和根节点为3时,必定有一些情况可以使用相同的以2为根的子树,而且也不需要重复的去计算以2为根的子树,空间和时间上均可以省一些。
但是写起来实在是觉得有一些麻烦,还是算了吧。倒是可以作为一个可优化点。
class Solution { public: vector<TreeNode *> generateTrees(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function return generateTreesInternal(1, n); } private: vector<TreeNode *> generateTreesInternal(int b, int e) { vector<TreeNode *> results; TreeNode *root = NULL; if (b > e) { results.push_back(NULL); return results; } int cur = b; for (; cur <= e; ++cur) { vector<TreeNode *> left = generateTreesInternal(b, cur - 1); vector<TreeNode *> right = generateTreesInternal(cur + 1, e); for (int i = 0; i < left.size(); ++i) { for (int j = 0; j < right.size(); ++j) { root = new TreeNode(cur); root->left = left[i]; root->right = right[j]; results.push_back(root); } } } return results; } };
Passion, patience, perseverance, keep it and move on.

浙公网安备 33010602011771号