当前位置:网站首页>[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)
边栏推荐
- 【数据聚类】第四章第一节3:DBSCAN性能分析、优缺点和参数选择方法
- 'using an alias column in the where clause in PostgreSQL' - using an alias column in the where clause in PostgreSQL
- Communication tutorial | overview of the first, second and third generation can bus
- Transformer principle and code elaboration (tensorflow)
- Is the main thread the same as the UI thread- Is main thread the same as UI thread?
- VIM, another program may be editing the same file If this is the solution of the case
- Pat 1059 prime factors (25 points) prime table
- Hongke case study on storm impact in coastal areas of North Carolina using lidar
- Why can the implementation class of abstractdispatcherservletinitializer be called when initializing the web container
- 使用 NSProxy 实现消息转发
猜你喜欢

IPv6 experiment

分布式事务相关概念与理论

Data communication and network: ch13 Ethernet

The latest idea activation cracking tutorial, idea permanent activation code, the strongest in history

Bottom Logic -- Mind Map
![[Android kotlin] lambda return statement and anonymous function](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[Android kotlin] lambda return statement and anonymous function

Transformer principle and code elaboration (pytorch)

17.内存分区与分页

It's hard to hear C language? Why don't you take a look at this (V) pointer

R语言--readr包读写数据
随机推荐
Global and Chinese markets of NOx analyzers 2022-2028: Research Report on technology, participants, trends, market size and share
C language: find the length of string
昨天的事情想说一下
C language: the sorting problem of circle number reporting
2022, 6G is heating up
Interview question MySQL transaction (TCL) isolation (four characteristics)
Tableau makes data summary after linking the database, and summary exceptions occasionally occur.
Leetcode day 17
C语言:求字符串的长度
When to use pointers in go?
Peak detection of measured signal
vim 出现 Another program may be editing the same file. If this is the case 的解决方法
How to realize the function of Sub Ledger of applet?
MPLS experiment
R language -- readr package reads and writes data
Map container
Concepts and theories related to distributed transactions
轻松玩转三子棋
Bottom Logic -- Mind Map
Unity performance optimization reading notes - Introduction (1)