#235. Lowest Common Ancestor of a Binary Search Tree
#Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

#According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

 

#Example 1:


#Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
#Output: 6
#Explanation: The LCA of nodes 2 and 8 is 6.


# 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':
        
        """
        find the first node falling in between p and q
        
        two nodes: large, small
        
        XXXXXX  small XXXX large XXXX
        
        if node.val < small.val: traverse node.right
        elif node.val>large.val: traverse node.left
        else: return node
        O(log N), O(logn)
        """
        
        if not root: return None
        elif root.val < min(p.val, q.val):
            return self.lowestCommonAncestor(root.right, p, q)
        elif root.val > max(p.val, q.val):
            return self.lowestCommonAncestor(root.left, p, q)
        return root
            
        
        
        