当前位置:网站首页>[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)
边栏推荐
- Global and Chinese market of piston rod 2022-2028: Research Report on technology, participants, trends, market size and share
- AI 绘画极简教程
- Exness: positive I win, negative you lose
- Unity performance optimization reading notes - Introduction (1)
- Why can the implementation class of abstractdispatcherservletinitializer be called when initializing the web container
- PKCs 5: password based cryptography specification version 2.1 Chinese Translation
- Understand bloomfilter in one article
- 【数据聚类】第四章第一节3:DBSCAN性能分析、优缺点和参数选择方法
- Jetson TX2 configures common libraries such as tensorflow and pytoch
- DC-5靶机
猜你喜欢
ArcGis利用栅格处理工具进行影像裁剪
Fastlane one click package / release app - usage record and stepping on pit
记一次 Showing Recent Errors Only Command /bin/sh failed with exit code 1 问题
《天天数学》连载57:二月二十六日
Show recent errors only command /bin/sh failed with exit code 1
Ml and NLP are still developing rapidly in 2021. Deepmind scientists recently summarized 15 bright research directions in the past year. Come and see which direction is suitable for your new pit
16.内存使用与分段
The latest idea activation cracking tutorial, idea permanent activation code, the strongest in history
DC-5靶机
01. Basics - MySQL overview
随机推荐
Cadence physical library lef file syntax learning [continuous update]
13、 C window form technology and basic controls (3)
Global and Chinese market for naval vessel maintenance 2022-2028: Research Report on technology, participants, trends, market size and share
Method of setting default items in C # ComboBox control code
2022, 6G is heating up
French Data Protection Agency: using Google Analytics or violating gdpr
Will the concept of "being integrated" become a new inflection point of the information and innovation industry?
16. Memory usage and segmentation
The frost peel off the purple dragon scale, and the xiariba people will talk about database SQL optimization and the principle of indexing (primary / secondary / clustered / non clustered)
Paper notes ACL 2020 improving event detection via open domain trigger knowledge
Flet教程之 02 ElevatedButton高级功能(教程含源码)(教程含源码)
C language: find the length of string
IIS error, unable to start debugging on the webserver
Fundamentals of container technology
'using an alias column in the where clause in PostgreSQL' - using an alias column in the where clause in PostgreSQL
ASP. Net razor – introduction to VB loops and arrays
记一次 Showing Recent Errors Only Command /bin/sh failed with exit code 1 问题
分布式事务相关概念与理论
Translation D29 (with AC code POJ 27:mode of sequence)
How to use the mongodb ID array to get multiple documents- How to get multiple document using array of MongoDb id?