题目原文:
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
题目大意:
给出n,输出节点值为1到n的所有二叉排序树。
题目分析:
使用分治法,分别令根节点为k,再递归生成1~k,k+1~n对应的二叉排序树列表,逐一加入到以k为根节点的列表中。
源码:(language:java)
public class Solution {
public List<TreeNode> generateTrees(int n) {
if(n==0) return new ArrayList<TreeNode>();
return generateTrees(1, n);
}
private List<TreeNode> generateTrees(int start, int end){
if(start>end) {
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(null);
return list;
}
if(start==end) {
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(new TreeNode(start)); return list;
}
List<TreeNode> roots = new ArrayList<TreeNode>();
for(int i=start;i<=end;i++){
List<TreeNode> leftTrees = generateTrees(start, i-1);
List<TreeNode> rightTrees = generateTrees(i+1, end);
for(int j=0;j<leftTrees.size();j++){
for(int k=0;k<rightTrees.size();k++){
TreeNode root = new TreeNode(i);
root.left = leftTrees.get(j);
root.right = rightTrees.get(k);
roots.add(root);
}
}
}
return roots;
}
}
成绩:
2ms,beats 88.62%,众数3ms,53.26%
cmershen的碎碎念:
大概从这段时间的题目开始,独立完成已经有难度,代码和分析有很多会来源于百度到的各路大神的博客和discuss中,但都加以我自己的理解。