Given a binary search tree (BST), find the lowest common ancestor (LCA) node 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).”
from leetcode_py import TreeNodeclass Solution: # Time: O(log n) average, O(n) worst case # Space: O(1) iterative, O(log n) recursive def lowest_common_ancestor( self, root: TreeNode[int] | None, p: TreeNode[int], q: TreeNode[int] ) -> TreeNode[int] | None: while root: # Both nodes are in left subtree if p.val < root.val and q.val < root.val: root = root.left # Both nodes are in right subtree elif p.val > root.val and q.val > root.val: root = root.right # Split point - one node on each side or one is the root else: return root return None