题目描述
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。
示例 1:
输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
示例 2:
输入: n = 1
输出: [[1]]
代码
var dfs = function(l, r){
let ans = [];
if(l > r) {
ans.push(null);
return ans;
}
if(l == r) return [new TreeNode(l)];
for(let i = l; i <= r; i++){
let left_tree = dfs(l, i - 1);
let right_tree = dfs(i + 1, r);
console.log('left_tree', left_tree);
for(let left of left_tree) {
for(let right of right_tree){
let t = new TreeNode(i);
t.left = left;
t.right = right;
ans.push(t);
}
}
}
return ans;
}
var generateTrees = function(n) {
let ans = [];
if(n == 0) return ans;
return dfs(1, n);
};