[LeetCode]Lowest Common Ancestor of a Binary Tree

Icarus<Wing>ยท2025๋…„ 5์›” 2์ผ
post-thumbnail

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/

๐Ÿ“œ๋ฌธ์ œ ํ•ด์„

์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํŠธ๋ฆฌ์—์„œ ์ฃผ์–ด์ง„ ๋‘ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ์กฐ์ƒ (LCA)์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค.
๐Ÿ”–LCA: "๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ์กฐ์ƒ์€ ๋‘ ๋…ธ๋“œ P์™€ Q ์‚ฌ์ด์—์„œ P์™€ Q๋ฅผ ์ž์†์œผ๋กœ์„œ T์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค (๋…ธ๋“œ ์ž์ฒด๊ฐ€ ํ›„์†์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)."

๐Ÿšง์ œ์•ฝ ์กฐ๊ฑด
1. ๋…ธ๋“œ์˜ ์ˆ˜: [2, 10^5]

  • bfs ๋˜๋Š” dfs์˜ ๋…ธ๋“œ ํƒ์ƒ‰ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)์ด๋ฏ€๋กœ ๊ฐ€๋Šฅ
  • ๋…ธ๋“œ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๊ฐ€ 2๋ผ๋Š” ๊ฒƒ์€, ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๋งŒ ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์˜๋ฏธ
  1. -10^9 <= Node.val <= 10^9
  • ๋…ธ๋“œ์˜ val์€ int ํƒ€์ž…
  1. ๋ชจ๋“  ๋…ธ๋“œ์˜ val์€ uniqueํ•˜๊ณ , p์™€ q ๋…ธ๋“œ๋Š” ๋‹ค๋ฅด๋‹ค.
  • key๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” Node.val์ด unique ํ•ด์„œ ์ถฉ๋Œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ๋งต์„ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค๋Š” ์˜๋ฏธ
  1. p์™€ q ๋…ธ๋“œ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์กด์žฌํ•œ๋‹ค.
  • ๊ตณ์ด p์™€ q์˜ val์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋ ˆ๋ฒจ๋งŒ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค๋Š” ์˜๋ฏธ

3๊ณผ 4 ์กฐ๊ฑด์€ p์™€ q๊ฐ€ ๊ฐ™์€ ๋…ธ๋“œ์ผ ์ˆ˜ ์—†๊ณ  p ๋˜๋Š” q ๋…ธ๋“œ๋งŒ ์กด์žฌํ•  ์ˆ˜๋„ ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

โš™๏ธ์ฝ”๋“œ ์„ค๊ณ„

๐Ÿ“ข๋ฌธ์ œ์˜ ์กฐ๊ฑด์ด ์ตœ์†Œ ๊ณตํ†ต "์กฐ์ƒ ๋…ธ๋“œ" ์ฐพ๊ธฐ ์ด๊ธฐ ๋•Œ๋ฌธ์—, BFS(levelOrder)๋ณด๋‹ค๋Š” dfs๋กœ ์žฌ๊ท€์ ์œผ๋กœ p์™€ q๋ฅผ ์ฐพ์€ ๋‹ค์Œ, ๋ฆฌํ„ดํ•ด์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ  ๊ณตํ†ต ์กฐ์ƒ ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— dfs๊ฐ€ ๋” ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.

๐Ÿ˜‚์‹ค์ œ๋กœ, level์— ๋”ฐ๋ฅธ ์ผ€์ด์Šค ๋ถ„๋ฅ˜๋ฅผ ํ•ด์„œ ํ•ด์‹œ๋งต์„ ์‚ฌ์šฉํ•œ levelOrder๋ฅผ ๊ตฌํ˜„ํ•ด๋ดค๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์˜ˆ์™ธ ์ผ€์ด์Šค๋“ค์ด ๋งŽ์•˜๊ณ  mapVisited<curNode.val, level> ์ด์™ธ์— ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋ณ„๋„์˜ ๋กœ์ง์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๊ฐํ•˜๊ฒŒ ํฌ๊ธฐํ•˜์˜€๋‹ค.

  1. preOrder๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์„œ p์™€ q ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ฐพ๋Š”๋‹ค.
  2. p์™€ q์˜ ๊ณตํ†ต ์กฐ์ƒ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
    2.1. p์™€ q๊ฐ€ ๋‹ค๋ฅธ subtree์— ์กด์žฌ: root ๋…ธ๋“œ๊ฐ€ LCA
    2.2. p์™€ q๊ฐ€ ๊ฐ™์€ subtree์— ์กด์žฌ: depth๊ฐ€ ๋‚ฎ์€ ๋…ธ๋“œ๊ฐ€ LCA

๐Ÿ’ป์ฝ”๋“œ ๊ตฌํ˜„

public class LcaSolution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        // base condition
        if (root == null) {
            return null;
        }

        // p์™€ q ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
        if (root == p) {
            return p;
        }
        if (root == q) {
            return q;
        }

        // p์™€ q๊ฐ€ ํŠน์ • subtree์— ์กด์žฌํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์œผ๋ฏ€๋กœ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
        TreeNode findNode1 = lowestCommonAncestor(root.left, p, q);
        TreeNode findNode2 = lowestCommonAncestor(root.right, p, q);

        // p์™€ q๊ฐ€ ๋‹ค๋ฅธ subtree์— ์กด์žฌ
        if ((findNode1 != null) && (findNode2 != null)) {
            return root;
        } // p์™€ q๊ฐ€ ๊ฐ™์€ subtree์— ์กด์žฌ
        else if (findNode1 == null) {
            return findNode2;
        } else {
            return findNode1;
        }

    }
}
  • lowestCommonAncestor(root.left, p, q)์™€ lowestCommonAncestor(root.right, p, q)๋กœ 2๊ฐœ์˜ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ ์ด์œ ๋Š” ๋ฌธ์ œ์—์„œ binary tree, ์ฆ‰ ์ฐจ์ˆ˜๊ฐ€ 2๊ฐœ ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ช…์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ๐Ÿ”–์ฐจ์ˆ˜: ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

๐Ÿ“์ด ๋ฌธ์ œ๊ฐ€ ๋ฌป๊ณ  ์žˆ๋Š” ๊ฒƒ์€:

  1. p์™€ q๊ฐ€ ๋‹ค๋ฅธ subtree์— ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ subtree์— ์กด์žฌํ•  ๋•Œ, ์ด๋ฅผ ์ผ€์ด์Šค ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‚˜?
    ๐Ÿ‘‰์ง์ ‘ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ๋‹ค๋ฅธ subtree์— ์กด์žฌํ•˜๋ฉด root๋ฅผ, ๊ฐ™์€ subtree์— ์žˆ์œผ๋ฉด depth๊ฐ€ ๋‚ฎ์€ ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ preorder๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

  2. preorder traversal์„ ํ•˜๋ฉด์„œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ, ์–ด๋– ํ•œ ํ–‰์œ„๋ฅผ ํ•  ๊ฒƒ์ธ๊ฐ€?
    ๐Ÿ‘‰์›๋ž˜ preorder ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ ์ถœ๋ ฅ์„ ํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ์ €์žฅํ–ˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” if๋ฌธ์œผ๋กœ root๊ฐ€ p ๋˜๋Š” q์™€ ๊ฐ™์€์ง€๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ํ–‰์œ„๋กœ ๋ณ€ํ™˜ํ•˜์˜€๋‹ค.

๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
๋ชจ๋“  ์ฝ”๋“œ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ๊ธฐ์— ์›์ธ์„ ํŒŒ์•…ํ•  ๋•Œ๊นŒ์ง€ ์ง‘์š”ํ•˜๊ฒŒ ํƒ๊ตฌํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€