Back to all solutions

#1650 - Lowest Common Ancestor of a Binary Tree III

Problem Description

Given two nodes of a binary tree p and q, return their lowest common ancestor (LCA).

Each node will have a reference to its parent node. The definition for Node is below: class Node { public int val; public Node left; public Node right; public Node parent; } According to the definition of LCA on Wikipedia: "The lowest common ancestor of two nodes p and q in a tree T is the lowest node that has both p and q as descendants (where we allow a node to be a descendant of itself)."

Solution

/**
 * // Definition for a _Node.
 * function _Node(val) {
 *    this.val = val;
 *    this.left = null;
 *    this.right = null;
 *    this.parent = null;
 * };
 */

/**
 * @param {_Node} p
 * @param {_Node} q
 * @return {_Node}
 */
var lowestCommonAncestor = function(p, q) {
  const set = new Set();

  let current = p;
  while (current) {
    set.add(current);
    current = current.parent;
  }

  current = q;
  while (current) {
    if (set.has(current)) {
      return current;
    }
    current = current.parent;
  }

  return null;
};