diff --git a/work/1/Medium/Tree/236.lowest-common-ancestor-of-a-binary-tree.py b/work/1/Medium/Tree/236.lowest-common-ancestor-of-a-binary-tree.py new file mode 100644 index 0000000..4908ba4 --- /dev/null +++ b/work/1/Medium/Tree/236.lowest-common-ancestor-of-a-binary-tree.py @@ -0,0 +1,76 @@ +""" +236. Lowest Common Ancestor of a Binary Tree +Difficulty: Medium +https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ + +────────────────────────────────────────────────── + +Given a binary tree, find the lowest common ancestor (LCA) of two +given nodes in the tree. + +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 = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 +Output: 3 +Explanation: The LCA of nodes 5 and 1 is 3. + +Example 2: + +Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 +Output: 5 +Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a +descendant of itself according to the LCA definition. + +Example 3: + +Input: root = [1,2], p = 1, q = 2 +Output: 1 + + + +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 tree. +""" + +# 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": + + if not root: + return None + + if root == p or root == q: + return root + + l = self.lowestCommonAncestor(root.left, p, q) + r = self.lowestCommonAncestor(root.right, p, q) + + if l and r: + return root + else: + return l or r