题目描述:
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。
示例:
输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ \3 2 1 1 3 2/ / \ \2 1 2 3
代码实现:
/*** Definition for a binary tree node.* function TreeNode(val) {* this.val = val;* this.left = this.right = null;* }*//*** @param {number} n* @return {TreeNode[]}*/var generateTrees = function(n) {if (n === 0) return []if (n === 1) return [new TreeNode(1)]var res = [new TreeNode(1), new TreeNode(2)]res[0].right = new TreeNode(2)res[1].left = new TreeNode(1)var num = 3while (num <= n) {var cache = []res.forEach(root => {var newRoot = new TreeNode(num)newRoot.left = rootcache.push(newRoot)var node = rootwhile (node) {newN = new TreeNode(num)var newNode = new TreeNode(node.val)newNode.left = node.leftnewNode.right = newNnewN.left = node.rightvar newRoot = node === root ? newNode : copyTree(root, newNode)cache.push(newRoot)node = node.right}})res = cachenum++}return resfunction copyTree(root, target) {var res = new TreeNode(root.val), parent = reswhile (root.right) {var node = new TreeNode(root.right.val)if (root.right.val === target.val) {parent.right = targetparent.left = root.leftbreak}parent.right = nodeparent.left = root.leftparent = noderoot = root.right}return res}};

