当前位置:网站首页>[leetcode] 96 and 95 (how to calculate all legal BST)
[leetcode] 96 and 95 (how to calculate all legal BST)
2022-07-04 12:46:00 【Learn a little every day】
How to calculate all legal BST
I wrote two articles before BST Algorithm related ⽂ Chapter , Chapter one About the middle order traversal pair BST The significance of , Second articles Yes BST Basic operation .
Ben ⽂ Say two questions step by step , Describe how to calculate all legal BST.
96. Different binary search trees
solution : recursive
This is an authentic problem of exhaustion , So what method can correctly enumerate the legal BST How about the number of ?
For interval [1,2,…,n], We calculate each number in turn as the root node , Then sum it up . For example, for n=5, Fixed number 3 As root node , Under this premise, there can be several different BST Well ?
Fix 3 Root node , according to BST characteristic , Its left subtree is a node [1,2] The combination of , The right subtree node is [4,5] The combination of , The product of the combination number of the left subtree and the combination number of the right subtree is 3 As the root node BST Number , be equal to 4.
Abstracted as a recursive process is , For any interval , Calculating the BST Number , Is a pair of BST The sum of the numbers . For any number root node , Its BST The number is , Left interval BST Number ( Combinatorial number ) Multiply by the right interval BST Number ( Combinatorial number ).
There are many repeating subproblems in recursive process , You can use memos ( In the code mamo Array ) To solve .
class Solution:
def numTrees(self, n: int) -> int:
mamo = [[0]*n for _ in range(n)]
# Calculate the closed interval [lo, hi] Composed of BST Number
def count(lo, hi):
nonlocal mamo
if lo >= hi:
return 1
# Check the memo
if mamo[lo][hi] != 0:
return mamo[lo][hi]
res = 0
for i in range(lo, hi+1):
# i As the root node root
left = count(lo, i-1)
right = count(i+1, hi)
# The product of the combination number of left and right subtrees is BST Total of
res += left*right
# Store memos
mamo[lo][hi] = res
return res
# Calculate the closed interval [1, n] Composed of BST Number
return count(0, n-1)
95. Different binary search trees 2
solution : recursive
Consistent with the above question , The original problem is decomposed into subproblems with left and right intervals , Recursively solve the original problem according to the return result of the subproblem . The specific steps are as follows :
- For a given interval , Exhausting root All possible nodes .
- Recursively construct all the legal properties of the left and right subtrees BST.
- to root The node enumerates the combination of all left and right subtrees . Return as result .
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
# Memo operation
mamo = [[None]*(n+1) for _ in range(n+1)]
# Tectonic closed interval [lo, hi] Composed of BST
def count(lo, hi):
if lo > hi:
return [None]
if lo == hi:
return [TreeNode(lo)]
if mamo[lo][hi]:
return mamo[lo][hi]
result = []
# 1、 Exhausting root All possible nodes
for i in range(lo, hi+1):
# 2、 Recursively construct all the legal properties of the left and right subtrees BST.
l_result = count(lo, i-1)
r_result = count(i+1, hi)
# 3、 to root The node enumerates the combination of all left and right subtrees .
for left in l_result:
for right in r_result:
# i As root node root Value
root = TreeNode(i)
root.left = left
root.right = right
result.append(root)
mamo[lo][hi] = result
return result
return count(1, n)
边栏推荐
- [data clustering] section 3 of Chapter 4: DBSCAN performance analysis, advantages and disadvantages, and parameter selection methods
- Fly tutorial 02 advanced functions of elevatedbutton (tutorial includes source code) (tutorial includes source code)
- Global and Chinese market for naval vessel maintenance 2022-2028: Research Report on technology, participants, trends, market size and share
- 记一次 Showing Recent Errors Only Command /bin/sh failed with exit code 1 问题
- 分布式事务相关概念与理论
- Abnormal mode of ARM processor
- Iterm tab switching order
- 03_ Armv8 instruction set introduction load and store instructions
- 01. Basics - MySQL overview
- Exness: positive I win, negative you lose
猜你喜欢
16. Memory usage and segmentation
[solve the error of this pointing in the applet] SetData of undefined
记一次 Showing Recent Errors Only Command /bin/sh failed with exit code 1 问题
Servlet learning notes
SAP ui5 date type sap ui. model. type. Analysis of the display format of date
0x15 string
Show recent errors only command /bin/sh failed with exit code 1
Will the concept of "being integrated" become a new inflection point of the information and innovation industry?
Wechat video Number launches "creator traffic package"
13、 C window form technology and basic controls (3)
随机推荐
The detailed installation process of Ninja security penetration system (Ninjitsu OS V3). Both old and new VM versions can be installed through personal testing, with download sources
When to use pointers in go?
Global and Chinese markets of NOx analyzers 2022-2028: Research Report on technology, participants, trends, market size and share
C language: the sorting problem of circle number reporting
Iframe to only show a certain part of the page
Global and Chinese markets for soluble suture 2022-2028: Research Report on technology, participants, trends, market size and share
Clion configuration of opencv
Pat 1059 prime factors (25 points) prime table
[data clustering] section 3 of Chapter 4: DBSCAN performance analysis, advantages and disadvantages, and parameter selection methods
Unity performance optimization reading notes - Introduction (1)
ArcGIS uses grid processing tools for image clipping
. Does net 4 have a built-in JSON serializer / deserializer- Does . NET 4 have a built-in JSON serializer/deserializer?
Paper notes ACL 2020 improving event detection via open domain trigger knowledge
【Android Kotlin】lambda的返回语句和匿名函数
Complementary knowledge of auto encoder
ArcGis利用栅格处理工具进行影像裁剪
Abnormal mode of ARM processor
Daily Mathematics Series 57: February 26
[Android reverse] function interception instance (③ refresh CPU cache | ④ process interception function | ⑤ return specific results)
C语言:求字符串的长度