2020.7.21算法
给定一个整数 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 排版