95. 不同的二叉搜索树 II(分治)

class Solution {
    public List<TreeNode> generateTrees(int n) {
        if(n == 0) return new ArrayList<>();
        return build(1,n);
    }
    public List<TreeNode> build(int l,  int r) {
        List<TreeNode> res = new ArrayList<>();
        if(l > r) {
            res.add(null);
            return res;
        }
        for(int i = l; i <= r; i++) {
            List<TreeNode> left = build(l,i-1);
            List<TreeNode> right = build(i+1,r);
            for(TreeNode ll : left) {
                for(TreeNode rr : right) {
                    TreeNode root = new TreeNode(i);
                    root.left = ll;
                    root.right = rr;
                    res.add(root);
                }
            }
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13269188.html