๋ฌธ์
ํ์ด ๊ณผ์
์ด์งํธ๋ฆฌ์ ์ง๋ฆ์ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ด์งํธ๋ฆฌ ํน์ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์ ์ง๋ฆ์ ์ฐพ๊ธฐ ์ํด์๋ ์์์ ๋ ์ ์ ์ฌ์ด์ ๊ฐ์ ์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ๊ฒฝ๋ก๋ฅผ ์์๋ด์ผํฉ๋๋ค.
์ฐ์ root
๋ฅผ ๋ฃจํธ ๋
ธ๋๋ก ๊ฐ์ง๋ ํธ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
1
/ \
2 3
/\
4 5
1
/
2
/ \
4 5
์ ๊ทธ๋ฆผ์์๋ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง๋ง ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํ๋์ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก(์ง๋ฆ)๋ ์๋
ธ๋ - ์๋
ธ๋
ํน์ ๋ฃจํธ๋
ธ๋ - ์๋
ธ๋
์ ํํ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ๋ฃจํธ๋
ธ๋ - ์๋
ธ๋
์ ๊ฒฝ์ฐ ํธ๋ฆฌ์ ๋์ด๋ฅผ ๊ตฌํ๋ฉด ๋์ง๋ง ์๋
ธ๋ - ์๋
ธ๋
์ ๊ฒฝ์ฐ ๋ด๋ถ ๋
ธ๋ ์ฌ์ด์์
๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก๊ฐ ํ์ฑ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์์ด๋์ด๊ฐ ํ์ํฉ๋๋ค.
์ด๋ฅผ ์ฝ๊ฒ ๊ตฌํ๊ธฐ ์ํด์๋ ๋ฃจํธ๋
ธ๋ - ์๋
ธ๋
๋ฅผ ๊ตฌํ๊ธฐ ์ํด ํธ๋ฆฌ์ ๋์ด๋ฅผ ๊ตฌํ๋ ์ฌ๊ทํจ์ ๋ด์์
๊ฐ๊ฐ์ ์๋ธํธ๋ฆฌ์ ๋ฃจํธ๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด + ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด
์ ๊ฐ์ ์ ์ญ๋ณ์์ ๊ฐฑ์ ์์ผ์ค๋๋ค.
์ต์ข
์ ์ผ๋ก๋ ์ฌ๊ท์ ์ธ ํธ์ถ ๋๋ถ์ ๊ฐ์ฅ ๊ธด ์๋
ธ๋ - ์๋
ธ๋
๊ธธ์ด๋ฅผ ๊ตฌํ ์ ์๊ณ ์ด๋ฅผ ํธ๋ฆฌ์ ๋์ด์ ๋น๊ตํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฝ๋
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var diameterOfBinaryTree = function (root) {
let longest = 0; // ๊ฐ์ฅ ๊ธด ์-์ ๊ฒฝ๋ก ๊ธธ์ด
function dfs(root) {
if (!root) {
return 0;
}
const leftHeight = dfs(root.left);
const rightHeight = dfs(root.right);
longest = Math.max(longest, leftHeight + rightHeight);
return Math.max(leftHeight, rightHeight) + 1;
}
const h = dfs(root) - 1;
return Math.max(longest, h);
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 876 - Middle of the Linked List (Easy) (0) | 2021.03.02 |
---|---|
LeetCode 221 - Maximal Square (Medium) (0) | 2021.03.02 |
LeetCode 283 - Move Zeroes (Medium) (0) | 2021.03.02 |
LeetCode 678 - Valid Parenthesis String (Medium) (0) | 2021.03.02 |
LeetCode 1094 - Car Pooling (Medium) (0) | 2021.03.02 |
๐ฌ ๋๊ธ