題目鏈接 https://leetcode-cn.com/problems/unique-binary-search-trees-ii/submissions/
思路:
將1-n中的任意一個數視爲樹的根節點,左邊的視爲左子樹,右邊視爲右子樹。然後遞歸的對左右子樹進行這種操作。
public List<TreeNode> generateTrees(int n) {
if(n < 1) {
return new ArrayList<>();
}
return generateTrees(1, n);
}
public List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> list = new ArrayList<>();
if(start > end) {
list.add(null);
return list;
}
for(int i = start; i <= end; i++) {
List<TreeNode> left = generateTrees(start, i-1);
List<TreeNode> right = generateTrees(i+1, end);
for (TreeNode l : left) {
for (TreeNode r : right) {
TreeNode node = new TreeNode(i);
node.left = l;
node.right = r;
list.add(node);
}
}
}
return list;
}