236. Lowest Common Ancestor of a Binary Tree

Leetcode

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/arrow-up-right

題目

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipediaarrow-up-right: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

Example 1:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.

Example 2:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

Example 3:

解答

  • 方法一

DFS

找到 LCA 的關鍵有兩點

  1. 左邊子節點及右邊子節點分別找到 p, q

  2. 本身節點為 p, q 其中一個,剩下的一個在左邊 or 右邊子節點

Runtime: 98 ms, faster than 69.39% of JavaScript online submissions for Lowest Common Ancestor of a Binary Tree.

Memory Usage: 51.5 MB, less than 84.43% of JavaScript online submissions for Lowest Common Ancestor of a Binary Tree.

  • 方法二

BST - 紀錄父節點方法

當 p, q 找到時,要找到 LCA 的方式就是要把遍歷尋找 p, q 時,把所有的父節點都用 hash map 記錄下來 (parentMap),接著再去比對 p, q 各自的父節點,找出共有的那個即是答案

Runtime: 188 ms, faster than 6.41% of JavaScript online submissions for Lowest Common Ancestor of a Binary Tree.

Memory Usage: 50.8 MB, less than 99.26% of JavaScript online submissions for Lowest Common Ancestor of a Binary Tree.

Last updated