๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿƒ algorithm/leetcode

LeetCode 543 - Diameter of Binary Tree (Easy)

by HandHand 2021. 3. 2.

๋ฌธ์ œ

LeetCode - 543๋ฒˆ

ํ’€์ด ๊ณผ์ •

์ด์ง„ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด์ง„ํŠธ๋ฆฌ ํ˜น์€ ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž„์˜์˜ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๊ฒฝ๋กœ๋ฅผ ์•Œ์•„๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  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

๐Ÿ’ฌ ๋Œ“๊ธ€