26 lines
922 B
Python
26 lines
922 B
Python
# Definition for a binary tree node.
|
|
# class TreeNode:
|
|
# def __init__(self, x):
|
|
# self.val = x
|
|
# self.left = None
|
|
# self.right = None
|
|
|
|
class Solution:
|
|
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
|
|
curr = root
|
|
|
|
while curr:
|
|
# Both p and q can be found in right subtree so move
|
|
# curr there
|
|
if p.val > curr.val and q.val > curr.val:
|
|
curr = curr.right
|
|
# Both p and q can be found in left subtree so move
|
|
# curr there
|
|
elif p.val < curr.val and q.val < curr.val:
|
|
curr = curr.left
|
|
# If above cases fail, that means we are already at a `curr`
|
|
# where p exists in one side and q exists on another side so
|
|
# that must mean `curr` is the LCA
|
|
else:
|
|
return curr
|