1. 程式人生 > >【LeetCode】73. Unique Binary Search Trees II

【LeetCode】73. Unique Binary Search Trees II

題目描述(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;
    }
};