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
解题思路:
解题主要思路见Unique Binary Search Trees,Unique Binary Search Trees是求所有形态数目,而II则是求各种具体形态,直接上代码:
/**
* 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) {
return assistDeals(1,n);
}
public List<TreeNode> assistDeals(int start,int end){
List<TreeNode> list = new ArrayList<TreeNode>();
List<TreeNode> temp = new ArrayList<TreeNode>();
List<TreeNode> temp2 = new ArrayList<TreeNode>();
TreeNode treeNode = new TreeNode(0);
if(end-start == 0){
treeNode = new TreeNode(start);
list.add(treeNode);
return list;
}
else if(end-start == 1){
treeNode = new TreeNode(start);
treeNode.right = new TreeNode(end);
list.add(treeNode);
treeNode = new TreeNode(end);
treeNode.left = new TreeNode(start);
list.add(treeNode);
return list;
}
else{
for(int i = start; i <= end; i++){
if(i == start){
temp = assistDeals(start+1,end);
for(int k = 0; k < temp.size(); k++){
treeNode = new TreeNode(start);
treeNode.right = temp.get(k);
list.add(treeNode);
}
}
else if(i == end){
temp = assistDeals(start,end-1);
for(int k = 0; k < temp.size(); k++){
treeNode = new TreeNode(end);
treeNode.left = temp.get(k);
list.add(treeNode);
}
}
else{
temp = assistDeals(start,i-1);
temp2 = assistDeals(i+1,end);
for(int j = 0; j < temp.size(); j++)
for(int k = 0; k < temp2.size(); k++){
treeNode = new TreeNode(i);
treeNode.left = temp.get(j);
treeNode.right = temp2.get(k);
list.add(treeNode);
}
}
}
return list;
}
}
}