95. 不同的二叉搜索树 II

给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。

链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function generateTrees(n: number): Array<TreeNode | null> {
if (!n) return []
return traverse(1, n)
};

function traverse(inStart: number, inEnd: number): TreeNode[] {
const result = []
if (inStart > inEnd) {
result.push(null)
return result
}
for(let i = inStart; i <= inEnd; i++) {
const left = traverse(inStart, i - 1)
const right = traverse(i + 1, inEnd)
const root = new TreeNode(i)
const leftLen = left.length
const rightLen = right.length
for(let j = 0; j < leftLen; j++) {
for(let k = 0; k < rightLen; k++) {
const root = new TreeNode(i)
root.left = left[j]
root.right = right[k]
result.push(root)
}
}
}
return result
}