Lowest common ancestor of a binary tree IV

August 7, 2023

tree

Problem URL: Lowest common ancestor of a binary tree IV

We will use a recursive approach to solve this problem. We will traverse the tree in a post-order fashion. We will return the node if it is equal to any of the nodes in the list of nodes. We will return None if the node is None. We will return the node if the left and right subtrees return a node. We will return the left subtree if the left subtree returns a node. We will return the right subtree if the right subtree returns a node. We will return None if the left and right subtrees return None.

# 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', nodes: 'List[TreeNode]') -> 'TreeNode':
        nodes = set(nodes)

        def _lowestCommonAncestor(root):
            if not root:
                return None
            if root in nodes:
                return root

            left, right = _lowestCommonAncestor(root.left), _lowestCommonAncestor(root.right)
            if left and right:
                return root
            return left or right

        return _lowestCommonAncestor(root)

Time Complexity: O(n) where n is the number of nodes in the tree.
Space Complexity: O(n) where n is the number of nodes in the tree.