Lowest Common Ancestor of a Binary Tree
Understand how to identify the lowest common ancestor of two given nodes in a binary tree. Learn to apply depth-first search traversal techniques and logical reasoning to solve the problem efficiently within the constraints of unique node data and the presence of both nodes.
We'll cover the following...
Statement
Given the root node of a binary tree with nodes, your task is to find the lowest common ancestor of two of its nodes, p and q.
Note: The lowest common ancestor of two nodes,
pandq, is defined as the lowest node in the binary tree that has bothpandqas descendants.A node can also be a descendant of itself. For example, if
qis a descendant ofp, and we know thatpis a descendant of itself, thenpwill be the lowest common ancestor ofpandq.
Constraints:
- All
Node.dataare unique. pqpandqexist in the tree.
Examples
Understand the problem
Let’s take a moment to make sure you’ve correctly understood the problem. The quiz below helps you check if you’re solving the correct problem:
Lowest Common Ancestor in a Binary Tree
What is the lowest common ancestor of and in the following binary tree?
5
/ \
6 7
/ \
8 9
5
6
7
8
Figure it out!
We have a game for you to play. Rearrange the logical building blocks to develop a clearer understanding of how to solve this problem.
Try it yourself
Implement your solution in the following coding playground.
// Definition for a binary tree node// template<class T>// class TreeNode {// public:// T data;// TreeNode<T>* left;// TreeNode<T>* right;// TreeNode(const T data) : data(data), left(nullptr), right(nullptr) {}// };class Solution {public:TreeNode<int>* LowestCommonAncestor(TreeNode<int>* root, TreeNode<int>* p, TreeNode<int>* q) {// Replace this placeholder return statement with your codereturn nullptr;}};