우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150

[Java] 637. Average of Levels in Binary Tree

2023. 9. 6. 13:17

문제 νŒŒμ•…

각 level(depth)의 λ…Έλ“œλ“€μ˜ val κ°’ 평균을 κ΅¬ν•΄μ„œ λ°˜ν™˜ν•΄μ•Όν•œλ‹€.

 


풀이

1️⃣ κ·Έλž˜ν”„ 탐색을 μ΄μš©ν•œ 풀이 (μ „μœ„ 탐색)

πŸ’‘ λ– μ˜€λ₯Έ Idea

μ „μœ„ 탐색을 depthλ₯Ό 1μ”© μ¦κ°€μ‹œν‚€λ©΄μ„œ 탐색을 ν•œλ‹€.

각 depth에 λ„λ‹¬ν–ˆμ„ λ•Œ, ν•΄λ‹Ή depth의 ν•©κ³Ό 개수λ₯Ό μ €μž₯ν•˜λŠ” Listλ₯Ό 톡해 정보λ₯Ό κ°±μ‹ ν•œλ‹€.

탐색이 λλ‚˜κ³  λ‚˜μ„œ, 평균 값을 κ΅¬ν•΄μ„œ λ°˜ν™˜ν•΄μ€€λ‹€.

 

import java.util.*;
class Solution {
    List<Info> list = new ArrayList<>();

    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> ans = new ArrayList<>();

        preOrder(root, 0);
        for (int i = 0; i < list.size(); i++) {
            Info info = list.get(i);
            ans.add(info.sum / info.cnt);
        }
        return ans;
    }

    private void preOrder(TreeNode node, int depth) {
        if (node == null) {
            return;
        }

        if (list.size() <= depth) {
            list.add(new Info(1, (double) node.val));
        } else {
            Info info = list.get(depth);
            info.cnt++;
            info.sum += node.val;
        }
        preOrder(node.right, depth + 1);
        preOrder(node.left, depth + 1);

    }
    
    static class Info{
        int cnt;
        double sum;

        public Info(int cnt, double sum) {
            this.cnt = cnt;
            this.sum = sum;
        }
    }
}

 

κ²°κ³Ό

 

2️⃣ bfsλ₯Ό μ΄μš©ν•œ 방법

πŸ’‘ λ– μ˜€λ₯Έ Idea

depth λ³„λ‘œ 합을 κ΅¬ν•˜κ³  μΉ΄μš΄νŒ…μ„ ν•œ λ’€, depth κ°€ λ‹¬λΌμ§€λŠ” μ‹œμ μ— 평균 값을 κ΅¬ν•˜λŠ” 방식도 μ‚¬μš©ν•  수 μžˆκ² λ‹€ μ‹Άμ—ˆλ‹€.

λ”°λΌμ„œ, 넓이 μš°μ„  탐색 방식인 bfs λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€.

 

class Solution {
    Queue<Info> q = new LinkedList<>();
    List<Double> ans = new ArrayList<>();

    public List<Double> averageOfLevels(TreeNode root) {

        if (root != null) {
            q.offer(new Info(root, 0));
        }

        int prevDepth = 0;
        double sum = 0;
        int cnt = 0;

        while (!q.isEmpty()) {
            Info info = q.poll();
            TreeNode node = info.node;
            int depth = info.depth;

            if (depth == prevDepth) {
                sum += node.val;
                cnt++;
            } else {
                ans.add(sum / cnt);
                prevDepth = depth;
                sum = node.val;
                cnt = 1;
            }
            if (node.left != null) {
                q.offer(new Info(node.left, depth + 1));
            }
            if (node.right != null) {
                q.offer(new Info(node.right, depth + 1));
            }
        }

        ans.add(sum / cnt);


        return ans;
    }

    static class Info {
        TreeNode node;
        int depth;

        public Info(TreeNode node, int depth) {
            this.node = node;
            this.depth = depth;
        }
    }
}

 

κ²°κ³Ό

트리λ₯Ό νƒμƒ‰ν•˜λŠ” λ°©μ‹λ³΄λ‹€λŠ” μ‹œκ°„μ΄ μ‘°κΈˆλ” μ†Œμš”λ˜μ—ˆλ‹€.

 


πŸ“– 회고

트리λ₯Ό μˆœνšŒν•˜λŠ” λ°©μ‹μœΌλ‘œλ„ κ΅¬ν˜„ν•΄λ³΄κ³  큐λ₯Ό μ΄μš©ν•œ bfs λ°©μ‹μœΌλ‘œλ„ 문제λ₯Ό ν•΄κ²°ν•΄λ³΄μ•˜λ‹€.

 

μ—¬λŸ¬κ°€μ§€ μ ‘κ·ΌμœΌλ‘œ ν’€μ–΄λ³΄λ‹ˆ 트리의 ꡬ쑰에 λŒ€ν•΄ 더 μžμ„Έν•˜κ²Œ μ•Œκ²Œ 된 것 κ°™λ‹€. 

    'πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Java] 211. Design Add and Search Words Data Structure
    • [Java] 208. Implement Trie (Prefix Tree)
    • [Java] 199. Binary Tree Right Side View
    • [Java] 230. Kth Smallest Element in a BST
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”