Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
Example:
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
解题方法:遍历所有的根节点,将其分为左右节点,为其左右节点进行遍历判断结果
public List<TreeNode> generateTrees(int n) { if(n<=0) { return new ArrayList<>(); } return getRes(1,n); } public List<TreeNode> getRes( int begin,int end) { List<TreeNode> res = new ArrayList<>(); if (begin > end) { return null; } for (int i = begin; i <= end; i++) { List<TreeNode> left = getRes(begin, i - 1); List<TreeNode> right = getRes(i + 1, end); if (left != null && right != null) { for (TreeNode l : left) { for (TreeNode r : right) { TreeNode now = new TreeNode(i); now.left = l; now.right = r; res.add(now); } } } else if (left != null) { for (TreeNode l : left) { TreeNode now = new TreeNode(i); now.left = l; res.add(now); } } else if (right != null) { for (TreeNode r : right) { TreeNode now = new TreeNode(i); now.right = r; res.add(now); } }else { TreeNode now = new TreeNode(i); res.add(now); } } return res; }