617. 合并二叉树:
代码思路
# 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]:
def dfs(node1, node2):
if node1 != None and node2 != None:
new_node = TreeNode(node1.val + node2.val)
new_node.left = dfs(node1.left, node2.left)
new_node.right = dfs(node1.right, node2.right)
elif node1 == None and node2 != None:
new_node = TreeNode(node2.val)
new_node.left = dfs(None, node2.left)
new_node.right = dfs(None, node2.right)
elif node2 == None and node1 != None:
new_node = TreeNode(node1.val)
new_node.left = dfs(node1.left, None)
new_node.right = dfs(node1.right, None)
else:
return None
return new_node
return dfs(root1, root2)
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]:
def dfs(node):
if not node:
return
if node.val == val:
return node
else:
if node.val < val:
return dfs(node.right)
else:
return dfs(node.left)
return dfs(root)
98. 验证二叉搜索树:
代码思路
递归老套路,但是这题不太容易发现。
就是判断这棵树是否是平衡,那要看左右子树是否平衡。但这题难点是涉及三代节点。
但是其实,每棵子树可以传入lowest和highest。画出具体包含每个节点区间的树的图就会很明显得到每个节点的最小值和最大值的递归形式。然后把这最小值和最大值传入到这个递归函数就好。
举个例子:5如果是root,左子节点的最小值和最大值就可以得到,而且你存了下来,这样孙子节点也可以继承爷爷节点的区间值。看起来很巧妙,但是其实画出包含每个节点区间的树状图就很明显!图形结合百般好啊!!!
(-∞,5) 5 (5,+∞)
# 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:
def validate(node, lowest, highest):
if node == None:
return True
if node.val <= lowest or node.val >= highest:
return False
return validate(node.left, lowest, node.val) and validate(node.right, node.val, highest)
return validate(root, float("-inf"), float("+inf"))