一、不同的二叉搜索树 ||
1.程序简介
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
示例 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
2.程序代码
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 27 09:38:58 2021
Function:
@author: 小梁aixj
"""
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):
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=1))
print(s.generateTrees(n=3))