1676. Lowest Common Ancestor of a Binary Tree IV
Description
Given the root
of a binary tree and an array of TreeNode
objects nodes
, return the lowest common ancestor (LCA) of all the nodes in nodes
. All the nodes will exist in the tree, and all values of the tree's nodes are unique.
Extending the definition of LCA on Wikipedia: "The lowest common ancestor of n
nodes p1
, p2
, ..., pn
in a binary tree T
is the lowest node that has every pi
as a descendant (where we allow a node to be a descendant of itself) for every valid i
". A descendant of a node x
is a node y
that is on the path from node x
to some leaf node.
Constraints
The number of nodes in the tree is in the range
[1, 104]
.-109 <= Node.val <= 109
All
Node.val
are unique.All
nodes[i]
will exist in the tree.All
nodes[i]
are distinct.
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: root = [3, 5, 1, 6, 2, 0, 8, null, null, 7, 4], nodes = [4, 7]

Output: 2
Explanation: The lowest common ancestor of nodes 4 and 7 is node 2.
Solutions
/**
* Time complexity : O(N)
* Space complexity : O(N)
*/
class Solution {
private Set<TreeNode> nodesSet;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode[] nodes) {
nodesSet = new HashSet(Arrays.asList(nodes));
return lcaHelper(root);
}
private TreeNode lcaHelper(TreeNode root) {
if(root == null || nodesSet.contains(root)) {
return root;
}
TreeNode left = lcaHelper(root.left);
TreeNode right = lcaHelper(root.right);
if(left != null && right != null) {
return root;
}
return (left != null)? left: right;
}
}
Follow up
Last updated
Was this helpful?