Master DFS to Find the Lowest Common Ancestor (LCA) in a Binary Tree 🌲
Learn how to efficiently find the LCA of two nodes in a binary tree using Depth-First Search (DFS) with this step-by-step Python guide. Perfect for mastering tree algorithms! 🚀
🔥 Related Trending Topics
LIVE TRENDSThis video may be related to current global trending topics. Click any trend to explore more videos about what's hot right now!
THIS VIDEO IS TRENDING!
This video is currently trending in Turkey under the topic 'masterchef çağlar'.
About this video
🚀 Find the Lowest Common Ancestor (LCA) in a Binary Tree using DFS! 🌳
The Lowest Common Ancestor (LCA) of two nodes p and q is the deepest node in the tree that has both p and q as descendants. A node is also considered a descendant of itself.
🔹 💡 Understanding the Problem
Given a binary tree and two nodes p and q, we need to find their lowest common ancestor (LCA).
The LCA is the lowest node in the tree that has both p and q in its subtree.
A node can be an ancestor of itself.
💡 Example 1:
3
/ \
5 1
/ \ / \
6 2 0 8
/ \
7 4
📌 Input: p = 5, q = 1
📌 Output: 3
📌 Explanation: The lowest common ancestor of 5 and 1 is 3, as 3 is the lowest node that has both 5 and 1 as descendants.
💡 Example 2:
3
/ \
5 1
/ \ / \
6 2 0 8
/ \
7 4
📌 Input: p = 5, q = 4
📌 Output: 5
📌 Explanation: 5 is an ancestor of 4, so LCA = 5.
🔹 Approach: Recursive Depth-First Search (DFS)
We use recursive DFS traversal to find the LCA.
1️⃣ Base Case:
If root is None, return None (tree is empty).
If root == p or root == q, return root (we found one of the nodes).
2️⃣ Recursive Calls:
Recursively search for p and q in the left and right subtrees.
3️⃣ Decision Making:
If both left and right subtrees return non-null values, the current node is the LCA.
If only one subtree returns non-null, return that subtree’s result (it contains both p and q).
🔹 Python Solution (Recursive DFS)
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def lowestCommonAncestor(self, root, p, q):
# Base case: If the current node is None, p, or q, return it
if not root or root == p or root == q:
return root
# Search for p and q in left and right subtrees
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
# If both left and right return non-null, current node is LCA
if left and right:
return root
# If only one side returns non-null, return that side
return left if left else right
🔹 Why This Approach Works Well?
✅ Recursive DFS ensures an efficient O(N) traversal.
✅ Handles all types of binary trees (balanced, skewed, full, etc.).
✅ Works without needing parent pointers or extra space.
⏳ Time Complexity: O(N), where N is the number of nodes.
📌 Space Complexity: O(H), where H is the height of the tree (recursive stack).
🔥 Master this fundamental problem to improve your tree traversal skills! 🚀
💡 #Python #DSA #BinaryTree #Recursion #Algorithm #CodingInterview #LeetCode #Programming
Video Information
Views
223
Total views since publication
Likes
3
User likes and reactions
Duration
0:10
Video length
Published
Mar 20, 2025
Release date
Quality
hd
Video definition
About the Channel
Tags and Topics
This video is tagged with the following topics. Click any tag to explore more related content and discover similar videos:
#binary tree #lowest common ancestor #recursion #depth-first search #LCA #tree traversal #python #coding interview #data structures #algorithms #tree problem #leetcode #dfs #programming challenge
Tags help categorize content and make it easier to find related videos. Browse our collection to discover more content in these categories.