๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

[์ฝ”ํ…Œ์—ฐ์Šต] 1261. Find Elements in a Contaminated Binary Tree

by ํฌ๋ผ00 2025. 2. 21.

https://leetcode.com/problems/find-elements-in-a-contaminated-binary-tree/description/?envType=daily-question&envId=2025-02-21

 

๐Ÿ“Œ ๋ฌธ์ œ ํƒ€์ž…

  • Tree (ํŠธ๋ฆฌ)
  • Binary Tree (์ด์ง„ ํŠธ๋ฆฌ)
  • Hashing (ํ•ด์‹ฑ)
  • Depth-First Search (DFS) / Breadth-First Search (BFS)

๐Ÿ” ๋ฌธ์ œ ๋ถ„์„

  • ๋ฌธ์ œ ๋ฐฐ๊ฒฝ
    ์ฃผ์–ด์ง„ ์ด์ง„ ํŠธ๋ฆฌ๋Š” -1๋กœ ์˜ค์—ผ๋˜์–ด ์žˆ์Œ. ์ด ํŠธ๋ฆฌ๋ฅผ ๋ณต๊ตฌํ•œ ํ›„ ํŠน์ • ๊ฐ’์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ.
  • ํŠธ๋ฆฌ ๋ณต๊ตฌ ๊ทœ์น™
    1. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ํ•ญ์ƒ 0์œผ๋กœ ์„ค์ •๋จ.
    2. x์˜ ์™ผ์ชฝ ์ž์‹์ด ์กด์žฌํ•˜๋ฉด ๊ฐ’์€ 2*x + 1
    3. x์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ์กด์žฌํ•˜๋ฉด ๊ฐ’์€ 2*x + 2
  • ์š”๊ตฌ ์‚ฌํ•ญ
    • ๋ณต๊ตฌ๋œ ํŠธ๋ฆฌ์—์„œ find(x)๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉฐ, ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ O(1)์— ๊ฐ€๊น๊ฒŒ ํŒ๋ณ„ํ•ด์•ผ ํ•จ.

๐Ÿ“ ๋ฌธ์ œ ํ’€์ด

  1. ํŠธ๋ฆฌ ๋ณต๊ตฌ
    • DFS ๋˜๋Š” BFS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฃจํŠธ๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ๋ณต๊ตฌ.
    • Set์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ’์„ ์ €์žฅ(๋น ๋ฅธ ํƒ์ƒ‰์„ ์œ„ํ•ด).
  2. ๊ฐ’ ํƒ์ƒ‰ (find)
    • Set์— ํ•ด๋‹น ๊ฐ’์ด ์žˆ๋Š”์ง€ O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํƒ์ƒ‰.
  3. ๊ตฌํ˜„ ๋ฐฉ์‹
    • TreeNode ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŠธ๋ฆฌ ํƒ์ƒ‰.
    • Set์„ ์ด์šฉํ•ด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธ.
    • DFS ๋˜๋Š” BFS๋กœ ํŠธ๋ฆฌ๋ฅผ ๋ณต๊ตฌํ•œ ํ›„, find(x) ํ˜ธ์ถœ ์‹œ set.contains(x)๋กœ ํ™•์ธ.

 

class FindElements {
    
    TreeNode node;
    Set<Integer> nums;

    public FindElements(TreeNode root) {
        root.val = 0;
        nums = new HashSet<>();
        nums.add(root.val);
        set(root, root.val);
        node = root;
    }

    void set(TreeNode node, int val){
        if (node.left != null) {
            node.left.val = 2 * val + 1;
            nums.add(node.left.val);
            set(node.left, node.left.val);
        }
        if (node.right != null) {
            node.right.val = 2 * val + 2;
            nums.add(node.right.val);
            set(node.right, node.right.val);
        }
    }
    
    public boolean find(int target) {
        return nums.contains(target);
    }

}