654.最大二叉树
比昨天简单。
# 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 constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
val_to_index = {}
for i in range(len(nums)):
val_to_index[nums[i]] = i
def build(start, end):
if start > end:
return None
mid = max(nums[start:end + 1])
ind = val_to_index[mid]
root = TreeNode(mid)
root.left = build(start, ind - 1)
root.right = build(ind + 1, end)
return root
return build(0, len(nums) - 1)
617.合并二叉树
也很容易,终止条件是两者至少有一个为None,不为None的一边就dominant只有他的部分。否则就将该节点求和,并且递归调用merge函数为新的root赋左右子树。
# 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 mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
if not root1:
return root2
if not root2:
return root1
root = TreeNode(root1.val + root2.val)
root.left = self.mergeTrees(root1.left, root2.left)
root.right = self.mergeTrees(root1.right, root2.right)
return root
700.二叉搜索树中的搜索
相当简单...
# 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 searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
if not root or root.val == val:
return root
elif root.val > val:
return self.searchBST(root.left, val)
else:
return self.searchBST(root.right, val)
# 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 searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
cur = root
while cur:
if cur.val == val:
return cur
elif cur.val > val:
cur = cur.left
else:
cur = cur.right
return cur
98.验证二叉搜索树
查左边最大的和右边最小的。
# 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 isValidBST(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
if not root.left and not root.right:
return True
lv = True
rv = True
if root.left:
l = root.left
while l.right:
l = l.right
lv = root.val > l.val and self.isValidBST(root.left)
if root.right:
r = root.right
while r.left:
r = r.left
rv = root.val < r.val and self.isValidBST(root.right)
return lv and rv
或者使用中序是有序的。
# 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 __init__(self):
self.pre = None
def isValidBST(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
left = self.isValidBST(root.left)
if self.pre and self.pre.val >= root.val:
return False
self.pre = root
right = self.isValidBST(root.right)
return left and right

被折叠的 条评论
为什么被折叠?



