LeetCode 每日一题 2020.7.21

116 阅读1分钟

2020.7.21算法

95. 不同的二叉搜索树 II

给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 .\与202.7.15那道算法题不同的是我们需要得到所有二叉搜索树的数组。

如果对于二叉搜索树不太了解可以查看2020.7.15 96.不同的二叉搜索树III

我们知道二叉树的性质是左子树小于根节点,右子树大于或等于根节点, 以此可以想到 如果取i为中间节点,那么左子树(1,i-1), 右子树(i+1,n),可以用递归来求解本题,递归需要一个终止条件,即左子树大于右子树的时候,二叉搜索树为空,所以可以以这个条件进行完成递归。

题解如下:javaScript

var generateTrees = function(n) {
    if (n === 0) {
        return [];
    }
    return buildTree(1,n);
}


function buildTree(start , end){
    // 如果左侧大于右侧  则搜索树为空
    if (start > end){
        return [null];
    }
    const res = [];
    for (let i = start; i <= end; i++) {
        let  left_trees = buildTree(start, i-1);
        let right_trees = buildTree(i+1,end);
        console.log(left_trees);
        for (const ln of left_trees) {
            for (const rn of right_trees) {
                const cur = new TreeNode(i);
                cur.left = ln;
                cur.right = rn;
                res.push(cur);
            }
        }
    }
    return res;
}

本文使用 mdnice 排版