动态规划
给定一个有序序列 1 ⋯n,为了构建出一棵二叉搜索树,我们可以遍历每个数字 ii,将该数字作为树根,将 1⋯(i−1) 序列作为左子树,将 (i+1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建左子树和右子树。
在上述构建的过程中,由于根的值不同,因此我们能保证每棵二叉搜索树是唯一的。
/**
* @param {number} n
* @return {number}
*/
var numTrees = function(n) {
let res = new Array(n + 1).fill(0);
res[0] = 1, res[1] = 1;
for (let i = 2; i <= n; i++) {
for (let j = 1; j <= i; j++) {
res[i] += res[j - 1] * res[i - j];
}
}
return res[n];
};
感谢观看 期待关注
关注我,带你一起写bug
warning :版权所有,转载请注明
有问题的小伙伴请在下方留言,喜欢就点个赞吧