From 6c18301aa66f176a32b31c9a42f61f089db523ff Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Sat, 5 Sep 2026 16:33:03 -0400 Subject: [PATCH] feat(work): add Lowest Common Ancestor of BST solution --- ...common-ancestor-of-a-binary-search-tree.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 work/1/Medium/Tree/235.lowest-common-ancestor-of-a-binary-search-tree.py diff --git a/work/1/Medium/Tree/235.lowest-common-ancestor-of-a-binary-search-tree.py b/work/1/Medium/Tree/235.lowest-common-ancestor-of-a-binary-search-tree.py new file mode 100644 index 0000000..591bb05 --- /dev/null +++ b/work/1/Medium/Tree/235.lowest-common-ancestor-of-a-binary-search-tree.py @@ -0,0 +1,70 @@ +""" +235. Lowest Common Ancestor of a Binary Search Tree +Difficulty: Medium +https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ + +────────────────────────────────────────────────── + +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).” + + + +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. + +Example 2: + +Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 +Output: 2 +Explanation: The LCA of nodes 2 and 4 is 2, since a node can be a +descendant of itself according to the LCA definition. + +Example 3: + +Input: root = [2,1], p = 2, q = 1 +Output: 2 + + + +Constraints: + + • The number of nodes in the tree is in the range [2, 10^5]. + + • -10^9 <= Node.val <= 10^9 + + • All Node.val are unique. + + • p != q + + • p and q will exist in the BST. +""" + +# 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": + cur = root + while cur: + if p.val < cur.val and q.val < cur.val: + cur = cur.left + elif p.val > cur.val and q.val > cur.val: + cur = cur.right + else: + return cur