# 代码随想录训练营第III期--020--python
# 654
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
if not nums: return
dd = {}
mm = -inf
for i in range(len(nums)):
mm = max(nums[i], mm)
dd[nums[i]] = i
index = dd[mm]
left = self.constructMaximumBinaryTree(nums[:index])
right = self.constructMaximumBinaryTree(nums[index+1:])
root = TreeNode(nums[index],left,right)
return root
# 617
def mergeTrees(self, t1, t2):
if not t1:
return t2
if not t2:
return t1
merged = TreeNode(t1.val + t2.val)
merged.left = self.mergeTrees(t1.left, t2.left)
merged.right = self.mergeTrees(t1.right, t2.right)
return merged
# 700
def searchBST(self, root, val):
if not root: return None
if val == root.val:
return root
return self.searchBST(root.left if val < root.val else root.right, val)
# 98
def isValidBST(self, root):
def helper(node, lower = float('-inf'), upper = float('inf')):
if not node: return True
val = node.val
if val <= lower or val >= upper: return False
if not helper(node.right, val, upper):
return False
if not helper(node.left, lower, val):
return False
return True
return helper(root)
# 805 不会,保存到题单里面了
def splitArray(nums):
n = len(nums)
m = n // 2
s = sum(nums)
if all(s * i % n for i in range(1,m+1)):
return False
dp = [set() for _ in range(m + 1)]
dp[0].add(0)
for num in nums:
for i in range(m, 0, -1):
for x in dp[i - 1]:
curr = x + num
if curr * n == s * i:
return True
dp[i].add(curr)
return False
代码随想录训练营第III期--020--python
最新推荐文章于 2024-07-23 14:36:35 发布