[Java] ํธ๋ฆฌ, ์ฌ๊ท | LeetCode 226 Invert Binary Tree (๊ท๋ฉ์ ์ผ๋ก ์๊ฐํ๊ธฐ)
๋ฌธ์ ๋งํฌ
๋ฌธ์ ์ ์ถ๋ ฅ
- ์ ๋ ฅ: ์ด์ง ํธ๋ฆฌ์ ๋ฃจํธ(root) ๋ ธ๋
- ์ถ๋ ฅ: ๊ฐ ๋ ธ๋์ ์์ ์ข์ฐ๋ฅผ ๋ค๋ฐ๊พผ ์ด์ง ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋
๋ชจ๋ ๋ ธ๋์ ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ ์๋ก ๊ตํํ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
๋จ์ํ๊ฒ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ๋ฉด์ ํด๋น ๋ ธ๋์ ์์๋ค์ swapํ๋ฉด ๋๋๋ฐ, ๋ฌธ์ ๋ฅผ ํธ๋ ๊ณผ์ ์์ ์ฌ๊ท์ ์ผ๋ก ๊ณ์ swapํด์ฃผ๋ฉด ๋๊ฒ ๋ค๋ ๊ฒ์ ์์์ง๋ง ์ฌ๊ท ํธ์ถ ์์๋ฅผ ๊น๊ฒ ์์ํ๋ฉด์ ๊ตฌํํ๋๋ฐ ์ฝ์ง์ ํด์ ๋๋ ๋ฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์์
4
/ \
2 7
/ \ / \
1 3 6 9
์ฌ๊ท ํธ์ถ ์์ (๊น์ด ์ฐ์ ํ์)
1. invertTree(4) ํธ์ถ
ํ์ฌ: 4
left = 2, right = 7
๊ตํ ํ: 4์ left←7, right←2
2. invertTree(7) ํธ์ถ (4์ ์๋ก์ด left)
ํ์ฌ: 7
left = 6, right = 9
๊ตํ ํ: 7์ left←9, right←6
3. invertTree(9) ํธ์ถ (7์ ์๋ก์ด left)
ํ์ฌ: 9
left = null, right = null
๋ณํ ์์ด ๋ฐํ
4. invertTree(6) ํธ์ถ (7์ ์๋ก์ด right)
ํ์ฌ: 6
left = null, right = null
๋ณํ ์์ด ๋ฐํ
5. invertTree(2) ํธ์ถ (4์ ์๋ก์ด right)
ํ์ฌ: 2
left = 1, right = 3
๊ตํ ํ: 2์ left←3, right←1
6. invertTree(3) ํธ์ถ (2์ ์๋ก์ด left)
ํ์ฌ: 3
left = null, right = null
๋ณํ ์์ด ๋ฐํ
7. invertTree(1) ํธ์ถ (2์ ์๋ก์ด right)
ํ์ฌ: 1
left = null, right = null
๋ณํ ์์ด ๋ฐํ
์ต์ข ๊ฒฐ๊ณผ
4
/ \
7 2
/ \ / \
9 6 3 1
์์ ๊ณผ์ ์ฒ๋ผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋๋ ๊ฒ์ ๋ง๋ค.
ํ์ง๋ง ์ฌ๊ท ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค ์ด๋ ๊ฒ ๋ชจ๋ ํธ์ถ ๊ณผ์ ์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ด ์คํ๋ ค ์๊ฐ์ ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ์์๋ค.
์ ๋ต ์ฝ๋๋ฅผ ๋ณด์.
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
// 1. ์์ ๋ณ์์ ์ ์ฅ
TreeNode temp = root.left;
// 2. ๊ตํ
root.left = root.right;
root.right = temp;
// 3. ์์ ๋
ธ๋๋ค๋ ๊ฐ์ ์์
์ํ
invertTree(root.left);
invertTree(root.right);
return root;
}
์ ๋ฌธ์ ์ ํต์ฌ์ "๊ฐ ๋ ธ๋์์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ตํํ๊ธฐ"์ด๋ค.
invertTree(TreeNode root)๊ฐ ์ง๊ธ ๋น์ฅ ํ ์ผ์ root ๋ ธ๋์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์๋ง ๋ฐ๊พธ๋๊ฒ ์ ๋ถ๋ค.
root ๋ ธ๋์ ์์๋ค์ swapํ ๋ค,
invertTree(์ผ์ชฝ ์์ ๋ ธ๋), invertTree(์ค๋ฅธ์ชฝ ์์ ๋ ธ๋)์ ํธ์ถํ๋ฉด,
๋ถ๋ชจ๊ฐ ํ๋ ์ผ(์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ตํํ๊ธฐ)์ ๋์ผํ๊ฒ ์ํํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
invertTree(ํ์ฌ ๋ ธ๋) ๋ฉ์๋ ์ ์ฅ์์ ์๊ฐํด๋ณด๋ฉด,
- "๋ด ํ ์ผ์ ํ์ฌ ๋ ธ๋์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ตํํ๋ ๊ฒ๋ฟ์ด๋ค."
- ๋ด ์ผ๋ง ๋ง์น ๋ค, invertTree(์ผ์ชฝ ์์ ๋ ธ๋), invertTree(์ค๋ฅธ์ชฝ ์์ ๋ ธ๋)์ ํธ์ถํด ์์๋ค์๊ฒ ๊ฐ์ ์ผ์ ์ํค์.
- "์์ ๋ ธ๋๋ค๋ ๊ฐ์ ์์์ ๊ฐ์ ์์ ์ ํ ๊ฒ์ด๋ค" => ์ด ๊ณผ์ ์ ๋๋ฌด ๊น๊ฒ ์๊ฐํ์ง ๋ง์.
๋ฐ๋ผ์ ์ฌ๊ท์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ๋๋, ์ข ๋ฃ์กฐ๊ฑด(base-condition)๊ณผ ํต์ฌ ๋ก์ง(ํด๋น ๋ฌธ์ ์์๋ ์์ ๊ตํ ๊ณผ์ )๋ง ์ ํํ๊ฒ ๊ตฌํํ๊ณ
์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ ์ผํ ์ฃผ์ฒด๋ง ์ ํํ ๊ณจ๋ผ์คฌ๋ค๋ฉด,
์ด์ด์ ํธ์ถ๋ ์ฃผ์ฒด๊ฐ ๊ทธ๋ค์ ์ญํ ์ ๋์ผํ๊ฒ ์ ์ํํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์.
๋๋ฏธ๋ ธ๋ ์ฒซ๋ฒ์งธ ๋๋ฏธ๋ ธ๋ง ๋ฐ๋ฉด ๋ชจ๋ ๋๋ฏธ๋ ธ๊ฐ ๋์ด์ง ๊ฒ์ด๋ผ๊ณ ๋น์ฐํ๊ฒ ๋ฏฟ๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ๋ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๋ฐํน๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์์์ ๊ท๋ฉ์ ์ผ๋ก ์ฌ๊ณ ํ๋ผ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์ธ ๊ฒ ๊ฐ์, ํน์ ์ฌ๊ท ๋ฌธ์ ์ ์ด๋ ค์์ ๋๋๋ค๋ฉด ์๋ ๊ฐ์๋ฅผ ๋ค์ด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
https://youtu.be/8vDDJm5EewM?si=H2hO9hU-jxs-5tu9