Leetcode 95. Unique Binary Search Trees II (分治题)

  1. Unique Binary Search Trees II
    Medium
    Given an integer n, return all the structurally unique BST’s (binary search trees), which has exactly n nodes of unique values from 1 to n. Return the answer in any order.

Example 1:

Input: n = 3
Output: [[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
Example 2:

Input: n = 1
Output: [[1]]

Constraints:

1 <= n <= 8

解法1:分治

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<TreeNode*> generateTrees(int n) {
       return helper(1, n);
    }
private:
    vector<TreeNode *> helper(int start, int end) {
        vector<TreeNode *> res;
        if (start > end) {
            res.push_back(NULL);
            return res;
        }
        //if (start == end) return {new TreeNode(start)};
        for (int i = start; i <= end; i++) {
            vector<TreeNode *> leftRes = helper(start, i - 1);
            vector<TreeNode *> rightRes = helper(i + 1, end);
            
            for (auto pLeft : leftRes) {
                for (auto pRight : rightRes) {
                    TreeNode *root = new TreeNode(i);
                    root->left = pLeft;
                    root->right = pRight;
                    res.push_back(root);
                }
            }
        }
        return res;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)