visited_node_set = set() while p: visited_node_set.add(p.val) p = self.node_to_father.get(p.val)
while q: if q.val in visited_node_set: return q q = self.node_to_father.get(q.val) deftraverse_tree(self, root): if root.left: self.node_to_father[root.left.val] = root self.traverse_tree(root.left) if root.right: self.node_to_father[root.right.val] = root self.traverse_tree(root.right)
if p.val == root.val or q.val == root.val: return root left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if left and right: return root if left: return left if right: return right