Similar Problems

Similar Problems not available

Lowest Common Ancestor Of A Binary Tree - Leetcode Solution

LeetCode:  Lowest Common Ancestor Of A Binary Tree Leetcode Solution

Difficulty: Medium

Topics: tree binary-tree depth-first-search  

Problem Description:

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

Example:

Input: 3 /
5 1 / \ /
6 2 7 4

p = 5, q = 1 Output: 3 Explanation: The LCA of nodes 5 and 1 is 3.

Solution:

To solve this problem, we need to traverse the binary tree and find the paths from the root to the two nodes p and q. Once we have the paths, we can find the last common node in the two paths, which will be the LCA.

For traversing the binary tree, we can use depth-first search (DFS) algorithm. We can define a recursive function findPath(root, node, path) that will take a root node, a node to find, and a list path that will contain the path from root to node. The function will return True if the node is found, False otherwise.

The main function lowestCommonAncestor(root, p, q) will call the findPath function twice to find the paths from the root to the two nodes p and q. Then it will iterate over the paths and find the last common node in the two paths.

Here is the Python code:

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def findPath(root, node, path):
    if not root:
        return False
    
    path.append(root)
    
    if root == node:
        return True
    
    if (root.left and findPath(root.left, node, path)) or \
       (root.right and findPath(root.right, node, path)):
        return True
    
    path.pop()
    return False

def lowestCommonAncestor(root, p, q):
    path1 = []
    findPath(root, p, path1)
    
    path2 = []
    findPath(root, q, path2)
    
    i = 0
    while i < len(path1) and i < len(path2) and path1[i] == path2[i]:
        i += 1
    
    return path1[i-1] if i > 0 else None

Time Complexity:

The time complexity of this method is O(N) where N is the number of nodes in the binary tree. In the worst case, we might need to traverse all the nodes to find the LCA.

Space Complexity:

The space complexity of this method is O(N) because we are storing the path lists for two nodes, which can have at most N nodes in total.

Lowest Common Ancestor Of A Binary Tree Solution Code

1