๋ฌธ์
ํ์ด ๊ณผ์
์ด์ง ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์กฐ์ ๋
ธ๋๊ฐ ๋๊ธฐ ์ํด์๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ํํ๋ฅผ ๊ฐ์ง๋๋ค.
q (A) a (A)
/ / \
b b q
/ /
p p
์ ๊ทธ๋ฆผ์์ p & q
์ ๊ณตํต ์กฐ์ ์ค ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋๋ ์ ์์ ๊ฒฝ์ฐ q
์ด๊ณ ํ์์ ๊ฒฝ์ฐ a
๊ฐ ๋ฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ์กฐ์ ๋
ธ๋ A
๋ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ๊ฐ p ํน์ q
๊ฐ ์กด์ฌํ๊ฑฐ๋
์กฐ์ ๋
ธ๋ A
๋ฅผ ํฌํจํ๊ณ ๋๋จธ์ง ํ ๋
ธ๋๊ฐ ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์กด์ฌํ๋ ํํ๋ฅผ ๊ฐ์ง๋๋ค.
๋ฐ๋ผ์ DFS
๋ฅผ ์ํํ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ํ์ผ ๋
ธ๋ p, q
์ ์กด์ฌ ์ ๋ฌด๋ฅผ ํ๋จํ๊ณ
ํ์ฌ ๋ฃจํธ ๋
ธ๋๋ฅผ ํฌํจํด์ ์์๋ค ์ค p ํน์ q
๊ฐ ๋ชจ๋ ๋ฐ๊ฒฌ๋๋ ์ฒซ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค.
์ฝ๋
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function (root, p, q) {
let ancestor = null;
function dfs(root, depth) {
if (!root) return false;
const here = root === p || root === q;
const left = dfs(root.left, depth + 1);
const right = dfs(root.right, depth + 1);
if ([here, left, right].filter((x) => x).length === 2) {
ancestor = root;
}
return here || left || right;
}
dfs(root, 0);
return ancestor;
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 763 - Partition Labels (Medium) (0) | 2021.03.04 |
---|---|
LeetCode 48 - Rotate Image (Medium) (0) | 2021.03.04 |
LeetCode 494 - Target Sum (Medium) (0) | 2021.03.04 |
LeetCode 187 - Repeated DNA Sequences (Medium) (0) | 2021.03.03 |
LeetCode 3 - Longest Substring Without Repeating Characters (Medium) (0) | 2021.03.03 |
๐ฌ ๋๊ธ