|
| 1 | +/** |
| 2 | + * Definition for a binary tree node. |
| 3 | + * public class TreeNode { |
| 4 | + * int val; |
| 5 | + * TreeNode left; |
| 6 | + * TreeNode right; |
| 7 | + * TreeNode(int x) { val = x; } |
| 8 | + * } |
| 9 | + */ |
| 10 | + |
| 11 | +/* |
| 12 | +1. ๋ฌธ์ ์ดํด |
| 13 | +๊ณตํต ์กฐ์์ ์ฐพ๋๋ฐ ์ต์์ ๊ณตํต ์กฐ์์ ์ฐพ๋๋ค |
| 14 | +์ฆ ์ต๋ํ ๋ฃจํธ์์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ์๋ ๊ทธ๋ฆฌ๊ณ ๋
ธ๋์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ๊ณตํต ์กฐ์์ ์ฐพ๋๋ค |
| 15 | +
|
| 16 | +2. ์๊ณ ๋ฆฌ์ฆ |
| 17 | +๋ต์ง ์ฐธ๊ณ |
| 18 | +์ฌ๊ท |
| 19 | +
|
| 20 | +3. ๋๋์ |
| 21 | +
|
| 22 | +์ด์งํธ๋ฆฌ์ ํน์ ์ ํ์ฉํด์ผํ๋ค. |
| 23 | +์ด์งํธ๋ฆฌ ์ด๋ฏ๋ก ์ผ์ชฝ ๋
ธ๋๋ ๋ฐ๋์ ๋ฃจํธ๋ณด๋ค ์๊ณ ์ค๋ฅธ์ชฝ์ ํฌ๋ค |
| 24 | +์ด ํน์ฑ์ ์ฌ์ฉํด์ ๋ชฉํ ํธ๋ฆฌ๋
ธ๋๊น์ง ๊ฐ์ผํ๋ค |
| 25 | +์ฌ๊ท์ ๋ฐํ์กฐ๊ฑด์ด ๊ณตํต์กฐ์์ ์ฐพ์์๋์ด๋ค ์ฌ๊ธฐ์ ๊ณตํต์กฐ์์ด ๋๋ ค๋ฉด 2๊ฐ์ ๊ฐ์ด ๋ฃจํธ๋ณด๋ค ํ๋๋ ํฌ๊ณ ํ๋๋ ์์์ผ ํ๋ค |
| 26 | +์ ์กฐ๊ฑด์ผ๋ ๊ณตํต์กฐ์์ ๊ฐ์ง๋ฏ๋ก ์ด ์์น๊น์ง ๋ฃจํธ๊ฐ ๋ด๋ ค์์ผ ํ๋ค |
| 27 | +
|
| 28 | +๋ค์ ๋งํด ์ด ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด 2๊ฐ์ ๊ฐ์ ๋น๊ตํด์ ํฐ์ง ์์์ง๋ฅผ ํ๋จํ๊ณ ๋๋ค ์๋๋ผ๋ฉด ๊ณตํต์กฐ์์ด๋ฏ๋ก ๋ฐํํ๋ฉด ๋๋ค |
| 29 | +์ด ๋ฐฉ๋ฒ์ ์๊ฐํ๊ธฐ ์ํด์๋ ์ด์ง ํธ๋ฆฌ ํน์ง์ ํ์ฉํด์ผํ๊ณ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋
ธ๋์ ๊ฐ์ ๋น๊ตํด์ ๊ณตํต ์กฐ์ ๋
ธ๋๊น์ง ๋ด๋ ค์จ๋ค๋ ์๊ฐ์ ํ์ด์ผ ํ๋ค |
| 30 | +
|
| 31 | +
|
| 32 | +*/ |
| 33 | + |
| 34 | +class Solution { |
| 35 | + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { |
| 36 | + // 2๊ฐ์ ๊ฐ์ด ๋ฃจํธ ๊ฐ ๋ณด๋ค ์๋ค๋ฉด ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ํ์ธ |
| 37 | + if (p.val < root.val && q.val < root.val) { |
| 38 | + return lowestCommonAncestor(root.left, p, q); |
| 39 | + // 2๊ฐ์ ๊ฐ์ด ๋ฃจํธ ๊ฐ ๋ณด๋ค ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ํ์ธ |
| 40 | + } else if (p.val > root.val && q.val > root.val) { |
| 41 | + return lowestCommonAncestor(root.right, p, q); |
| 42 | + // 2๊ฐ์ ๊ฐ ์ค ํ๋๋ ๋ฃจํธ ๊ฐ ๋ณด๋ค ํฌ๊ณ ํ๋๋ ์๋ค๋ฉด ํ์ฌ ๋ฃจํธ๊ฐ ์ต์ ๊ณตํต ์กฐ์์ด๋ฏ๋ก ๋ฐํ |
| 43 | + } else { |
| 44 | + return root; |
| 45 | + } |
| 46 | + } |
| 47 | +} |
| 48 | + |
0 commit comments