Given 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
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / 2 3 / 4 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.[解题思路]
划分成左右子树分别进行构造,当左右子树所有可能情况都构造完毕后,加上node即可
这里根节点可能情况为1,2,....,n
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; left = null; right = null; } 8 * } 9 */ 10 public class Solution { 11 public ArrayList<TreeNode> generateTrees(int n) { 12 // Start typing your Java solution below 13 // DO NOT write main() function 14 if(n == 0){ 15 return generate(1, 0); 16 } 17 return generate(1, n); 18 } 19 20 public ArrayList<TreeNode> generate(int start, int end){ 21 ArrayList<TreeNode> subTree = new ArrayList<TreeNode>(); 22 if(start > end){ 23 subTree.add(null); 24 return subTree; 25 } 26 27 for(int i = start; i <= end; i++){ 28 ArrayList<TreeNode> leftSubTree = generate(start, i - 1); 29 ArrayList<TreeNode> rightSubTree = generate(i + 1, end); 30 for(int j = 0; j < leftSubTree.size(); j++){ 31 for(int k = 0; k < rightSubTree.size(); k++){ 32 TreeNode node = new TreeNode(i); 33 node.left = leftSubTree.get(j); 34 node.right = rightSubTree.get(k); 35 subTree.add(node); 36 } 37 } 38 } 39 return subTree; 40 } 41 }