【LeetCode】73. Unique Binary Search Trees II
阿新 • • 發佈:2018-12-12
題目描述(Medium)
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
題目連結
Example 1:
Input: 3 Output: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] Explanation: The above output corresponds to the 5 unique BST's shown below:
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
演算法分析
當陣列為1,2,3,...,n時,基於以下原則構建的BST樹具有唯一性:以i為根節點的樹,其左子樹由[1, i-1]構成,其右子樹由[i+1,n]構成。
提交程式碼:
class Solution { public: vector<TreeNode*> generateTrees(int n) { if (n == 0) return vector<TreeNode*>(); return generate(1, n); } vector<TreeNode*> generate(int start, int end) { vector<TreeNode*> subTree; if(start > end) { subTree.push_back(NULL); return subTree; } for (int k = start; k <= end; ++k) { vector<TreeNode*> leftTree = generate(start, k - 1); vector<TreeNode*> rightTree = generate(k + 1, end); for (auto i : leftTree) for (auto j : rightTree) { TreeNode* node = new TreeNode(k); node->left = i; node->right = j; subTree.push_back(node); } } return subTree; } };