https://leetcode.com/problems/unique-binary-search-trees-ii/
题目会给你一个数字 n,你要用范围 1 to n 建立所有的二元搜寻树(binary search trees)
这题算是很基本的Divide and Conquer,所以有点不知道要打什麽
总之先上程序码吧
# 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 BST(arr):
if len(arr) == 0:
return [None]
res = []
for i in range(len(arr)):
leftTree = BST(arr[:i])
rightTree = BST(arr[i+1:])
for l in leftTree:
for r in rightTree:
res.append(TreeNode(arr[i],l, r))
return res
return BST([i for i in range(1, n+1)])
这个方法把输入改成有开头和结尾,并用一个 memory 去记下曾经组过的树,若之後再次遇到同样的开头和结尾,就可以拿出储存值省略一些步骤了
# 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]]:
memory = {}
def BST(start, end):
if start > end:
return [None]
if (start, end) in memory:
return memory[(start, end)]
res = []
for i in range(start, end+1):
leftTree = BST(start, i-1)
rightTree = BST(i+1, end)
for l in leftTree:
for r in rightTree:
res.append(TreeNode(i, l, r))
memory[(start, end)] = res
return res
return BST(1, n)
今天是第二天,题目比昨天简单一点
本来想说竟然都打这篇了,乾脆连他的类似题目Unique Binary Search Trees 也一起打
後来想想算了,过几天後LeetCode可能就把这题当作当天的题目
所以之後遇到再说吧!
<<: 小产品跟大产品都可以通用的决策系统:Randomized AB Test
我第一次听到hash式在资料结构的课堂上,因为它式资料结构很重要的基本概念,同时也广泛运用在区块练...
OpenStack 早期在部署方面相当复杂也难以维护,但是在近期 DevOps 跟 Containe...
一、初次见面请多指教 小编目前大三升大四,一年前开始接触AI这个领域,动机不外乎就是趋势,自从Alp...
随着内容越来越多,结构更加复杂,是时候来整理一下关於字型的配置,这次我们来新增一个 _typogra...
DOM(Document Object Model) 文件物件模型 今天简单聊聊之後要进入的主题,D...