96. Unique Binary Search Trees
Last updated
Last updated
var numTrees = function (n) {
const checkNumTrees = (start, end) => {
let totalNums = 0;
if (start > end) {
return 1;
}
if (start === end) {
return 1;
}
for (let i = start; i <= end; i++) {
const leftTreeNums = checkNumTrees(start, i - 1);
const rightTreeNums = checkNumTrees(i + 1, end);
// 左右子樹的數量相配對後,再加進來
totalNums += leftTreeNums * rightTreeNums;
}
return totalNums;
}
return checkNumTrees(1, n);
};var numTrees = function (n) {
const checkNumTrees = (n) => {
let totalNums = 0;
// 0 個或 1 個節點都回傳 1
if (n === 0 || n === 1) {
return 1;
}
for (let i = 1; i <= n; i++) {
const leftTreeNums = checkNumTrees(i - 1);
const rightTreeNums = checkNumTrees(n - i);
totalNums += leftTreeNums * rightTreeNums;
}
return totalNums;
}
return checkNumTrees(n);
};var numTrees = function (n) {
// 利用 map 快取 n 與樹狀結構總數的關係
const map = {};
const checkNumTrees = (n) => {
if (n in map) {
return map[n];
}
let totalNums = 0;
if (n === 0 || n === 1) {
return 1;
}
for (let i = 1; i <= n; i++) {
const leftTreeNums = checkNumTrees(i - 1);
const rightTreeNums = checkNumTrees(n - i);
totalNums += leftTreeNums * rightTreeNums;
}
map[n] = totalNums;
return totalNums;
}
return checkNumTrees(n);
};