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
Subscribe to see which companies asked this question.
题目是要将所有的二叉树输出来,思路是从1遍历到n,再调用递归,等于左子树乘以右子树的情况,SetTree定义了从start到end的生成的二叉树,当start>end,子树为null,当start=end,生成一个节点,当start
public ArrayList<TreeNode> generateTrees(int n) {
ArrayList<TreeNode>list=new ArrayList<>();
return SetTree(1, n);
}
private static ArrayList<TreeNode> SetTree(int start,int end) {
ArrayList<TreeNode>list=new ArrayList<>();
if(start>end){
list.add(null);
return list;
}
if (start==end) {
list.add(new TreeNode(end));
return list;
}
for (int i = start; i <= end ; i++) {
ArrayList<TreeNode>left=SetTree(start, i-1);
ArrayList<TreeNode>right=SetTree(i+1, end);
for (int j = 0; j < left.size(); j++) {
for (int k = 0; k < right.size(); k++) {
TreeNode node=new TreeNode(i);
node.left=left.get(j);
node.right=right.get(k);
list.add(node);
}
}
}
return list;
}