Spaces:
Sleeping
Sleeping
| # 定义一个节点类 | |
| class TreeNode: | |
| def __init__(self, x): | |
| self.val = x | |
| self.left = None | |
| self.right = None | |
| # 定义生成二叉搜索树的函数 | |
| def generateTrees(n): | |
| if n == 0: | |
| return [] | |
| return generate_trees(1, n) | |
| def generate_trees(start, end): | |
| if start > end: | |
| return [None,] | |
| all_trees = [] | |
| for i in range(start, end + 1): # 枚举可行根节点 | |
| # 获得所有可行的左子树集合 | |
| left_trees = generate_trees(start, i - 1) | |
| # 获得所有可行的右子树集合 | |
| right_trees = generate_trees(i + 1, end) | |
| # 从左子树集合中选出一棵左子树,从右子树集合中选出一棵右子树,拼接到根节点上 | |
| for l in left_trees: | |
| for r in right_trees: | |
| curr_tree = TreeNode(i) | |
| curr_tree.left = l | |
| curr_tree.right = r | |
| all_trees.append(curr_tree) | |
| return all_trees | |
| # 测试 | |
| n = 5 | |
| trees = generateTrees(n) | |
| for tree in trees: | |
| print(tree.val) # 打印根节点值 |