原题
https://leetcode.cn/problems/unique-binary-search-trees-ii/description/
思路
递归
复杂度
时间:O(n3)
空间:O(n3)
Python代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def generateTrees(self, n: int) -> List[Optional[TreeNode]]:
def backtrack(start, end):
if start > end:
return [None]
res = []
for i in range(start, end + 1):
left_trees = backtrack(start, i-1)
right_trees = backtrack(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
res.append(curr_tree)
return res
return backtrack(1, n)
Go代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func generateTrees(n int) []*TreeNode {
// 匿名函数
var backtrack func(int, int) []*TreeNode
backtrack = func(start int, end int) []*TreeNode {
if start > end {
return []*TreeNode{nil}
}
res := []*TreeNode{}
for i := start; i <= end; i++ {
left_trees := backtrack(start, i-1)
right_trees := backtrack(i+1, end)
for _, l := range left_trees {
for _, r := range right_trees {
curr_tree := &TreeNode{Val: i}
curr_tree.Left = l
curr_tree.Right = r
res = append(res, curr_tree)
}
}
}
return res
}
return backtrack(1, n)
}
1318

被折叠的 条评论
为什么被折叠?



