[路飞]_95. 不同的二叉搜索树 II

78 阅读1分钟

题目路径

题目描述

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。

示例 1: image.png

输入: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);
};