# 不同的二叉搜索树 II

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

 

示例 1:

输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
    

示例 2:

输入:n = 1
输出:[[1]]
    

 

提示:

  • 1 <= n <= 8
## template ```python class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = None def to_list(self, count): queue = [] queue.append(self) result = [] while len(queue) > 0: if count == 0: break node = queue.pop(0) if node is None: result.append('null') else: count -= 1 result.append(node.val) queue.append(node.left) queue.append(node.right) return result class Solution(object): def generateTrees(self, n): """ :type n: int :rtype: List[TreeNode] """ if n == 0: return [] return self.get_trees(1, n) def get_trees_impl(self, start, end): trees = [] if start > end: trees.append(None) return trees for i in range(start, end + 1): lefts = self.get_trees_impl(start, i - 1) rights = self.get_trees_impl(i + 1, end) for j in range(len(lefts)): for k in range(len(rights)): root = TreeNode(i) root.left = lefts[j] root.right = rights[k] trees.append(root) return trees def get_trees(self, start, end): trees = self.get_trees_impl(start, end) results = [] for tree in trees: if tree is None: results.append([]) else: results.append(tree.to_list(end)) return results # %% s = Solution() print(s.generateTrees(n=3)) ``` ## 答案 ```python ``` ## 选项 ### A ```python ``` ### B ```python ``` ### C ```python ```