1
# Definition for a binary tree node.3
# def __init__(self, val=0, left=None, right=None):8
def subtreeWithAllDeepest(self, root: TreeNode) -> TreeNode:10
# find a set of deepest nodes first12
self.find_deepest(root, 0, deepest_nodes)14
# extract the depth and also make a set out of the values15
targets = set(deepest_nodes[1:])18
return self.find_merge(root, targets)[0]20
def find_deepest(self, node, current_depth, deepest_nodes):26
# make a check if we are a deep node27
if current_depth > deepest_nodes[0]:29
deepest_nodes.append(current_depth)30
deepest_nodes.append(node.val)31
elif current_depth == deepest_nodes[0]:32
deepest_nodes.append(node.val)35
self.find_deepest(node.left, current_depth + 1, deepest_nodes)36
self.find_deepest(node.right, current_depth + 1, deepest_nodes)38
def find_merge(self, node, targets):44
# check whether we are a target46
if node.val in targets:49
# go deeper and get result nodes50
nleft, left = self.find_merge(node.left, targets)53
nright, right = self.find_merge(node.right, targets)54
if nright is not None:58
found = found | left | right60
# check whether we found all61
if not (targets - found):