题目描述
1-N的数字,列出所有搜索二叉树的情况
解题思路
递归的思想,那么递归的出口是left>right,假设N = 1,那么如果是left == right作为出口,则丢掉结果。
每次把元素分为两部分,遍历着添加元素
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
if n == 0: return []
return self.dfs(1,n)
def dfs(self,left,right):
if left > right:
return [None]
res = []
for i in range(left,right + 1):
left_nodes = self.dfs(left,i-1)
right_nodes = self.dfs(i+1,right)
for left_node in left_nodes:
for right_node in right_nodes:
root = TreeNode(i)
res.append(root)
root.left = left_node
root.right = right_node
return res