Find LCA in organization tree

Quick Overview

This interview question evaluates algorithm design, data structures, correctness, complexity, edge cases, and implementation details in a realistic interview setting. A strong answer for Find LCA in organization tree states assumptions, handles edge cases, explains trade-offs, and shows how to validate the result clearly.

Find LCA in organization tree

Company: Atlassian

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Technical Screen

##### Question Given an organizational hierarchy tree, return the lowest common organization (parent node) for two or more employees (≥ 2). Provide unit tests, detail your tree representation, and discuss how to support dynamic additions and deletions of users/groups with thread-safety considerations.

Overview: This interview question evaluates algorithm design, data structures, correctness, complexity, edge cases, and implementation details in a realistic interview setting. A strong answer for Find LCA in organization tree states assumptions, handles edge cases, explains trade-offs, and shows how to validate the result clearly.

Community answers

Answer by akashchand3071

.

Answer by mdshabaz25a

import java.util.*; public class Solution { // Helper class to wrap the result during tree traversal private static class Result { int matchCount; Integer ancestor; Result(int matchCount, Integer ancestor) { this.matchCount = matchCount; this.ancestor = ancestor; } } public static int findNearestCommonManager(List edges, int root, List queries) { // Step 1: Map the target queries to a Set for O(1) lookups Set targets = new HashSet<>(queries); // Step 2: Construct the adjacency tree structure (Manager -> List of Direct Reports) Map> tree = new HashMap<>(); for (int[] edge : edges) { int employee = edge[0]; int manager = edge[1]; tree.computeIfAbsent(manager, k -> new ArrayList<>()).add(employee); } // Step 3: Run the post-order recursive search from the CEO node Result finalResult = lcaHelper(root, tree, targets); return finalResult.ancestor != null ? finalResult.ancestor : root; } private static Result lcaHelper(int currentNode, Map> tree, Set targets) { int totalMatchesFound = 0; // Check if the current node itself is one of the targeted employees if (targets.contains(currentNode)) { totalMatchesFound++; } // Recurse through all direct reports (children) List directReports = tree.getOrDefault(currentNode, Collections.emptyList()); for (int report : directReports) { Result childResult = lcaHelper(report, tree, targets); // If an ancestor was already pinpointed down the line, short-circuit and bubble it up if (childResult.ancestor != null) { return childResult; } totalMatchesF
Atlassian logo
Atlassian
Aug 4, 2025
mediumSoftware EngineerTechnical ScreenCoding & Algorithms
30
0

Find LCA in organization tree

Given an organizational hierarchy tree, return the lowest common organization (parent node) for two or more employees (≥ 2). Provide unit tests, detail your tree representation, and discuss how to support dynamic additions and deletions of users/groups with thread-safety considerations.

Clarifying Questions to Ask Guidance

  • Clarify input sizes, value ranges, mutability, return format, and tie-breaking.
  • State the target time and space complexity before coding.
  • Call out edge cases such as empty inputs, duplicates, invalid values, overflow, and boundary sizes.

What a Strong Answer Covers Guidance

  • A clear algorithm with the right data structures and enough pseudocode or code-level detail to implement it.
  • A correctness argument that explains why the algorithm covers all required cases.
  • Time and space complexity, plus at least one alternative approach when relevant.
  • Focused tests for normal cases, edge cases, and failure modes.

Follow-up Questions Guidance

  • How would the approach change if the input were streaming or too large for memory?
  • What invariants would you assert in production code?
  • Which tests would catch off-by-one, duplicate, or tie-breaking bugs?