From 91cc45db21b2df7bc183010fbe12aa3c3df230fa Mon Sep 17 00:00:00 2001 From: Sangeeth Sudheer Date: Mon, 25 Apr 2022 21:52:36 +0530 Subject: [PATCH] lca py3 --- .../README.md | 37 +++++++++++++++++++ .../python3/solution.py | 25 +++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 0235_lowest-common-ancestor-of-a-binary-search-tree/README.md create mode 100644 0235_lowest-common-ancestor-of-a-binary-search-tree/python3/solution.py diff --git a/0235_lowest-common-ancestor-of-a-binary-search-tree/README.md b/0235_lowest-common-ancestor-of-a-binary-search-tree/README.md new file mode 100644 index 0000000..bff1fb3 --- /dev/null +++ b/0235_lowest-common-ancestor-of-a-binary-search-tree/README.md @@ -0,0 +1,37 @@ +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](https://en.wikipedia.org/wiki/Lowest_common_ancestor): “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:** + +![](https://assets.leetcode.com/uploads/2018/12/14/binarysearchtree_improved.png) + + 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:** + +![](https://assets.leetcode.com/uploads/2018/12/14/binarysearchtree_improved.png) + + 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, 105]`. +* `-109 <= Node.val <= 109` +* All `Node.val` are **unique**. +* `p != q` +* `p` and `q` will exist in the BST. + +https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree \ No newline at end of file diff --git a/0235_lowest-common-ancestor-of-a-binary-search-tree/python3/solution.py b/0235_lowest-common-ancestor-of-a-binary-search-tree/python3/solution.py new file mode 100644 index 0000000..8b0ff46 --- /dev/null +++ b/0235_lowest-common-ancestor-of-a-binary-search-tree/python3/solution.py @@ -0,0 +1,25 @@ +# 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