Given an integer 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
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<TreeNode> generateTrees(int n) { if(n < 1) return new ArrayList<>(); return generateSubTree(1,n); } public List<TreeNode> generateSubTree(int left, int right){ List<TreeNode> res = new ArrayList<TreeNode>(); if(left > right){ res.add(null); return res; } for(int i = left; i <= right; i++){ List<TreeNode> leftTree = generateSubTree(left, i-1); List<TreeNode> rightTree = generateSubTree(i+1, right); for(int j = 0 ; j < leftTree.size(); j ++){ for(int k = 0; k < rightTree.size(); k++){ TreeNode root = new TreeNode(i); root.left = leftTree.get(j); root.right = rightTree.get(k); res.add(root); } } } return res; } }