๐ ๋ฌธ์ ํ์
- Tree (ํธ๋ฆฌ)
- Binary Tree (์ด์ง ํธ๋ฆฌ)
- Hashing (ํด์ฑ)
- Depth-First Search (DFS) / Breadth-First Search (BFS)
๐ ๋ฌธ์ ๋ถ์
- ๋ฌธ์ ๋ฐฐ๊ฒฝ
์ฃผ์ด์ง ์ด์ง ํธ๋ฆฌ๋ -1๋ก ์ค์ผ๋์ด ์์. ์ด ํธ๋ฆฌ๋ฅผ ๋ณต๊ตฌํ ํ ํน์ ๊ฐ์ ํฌํจํ๋์ง ํ์ธํด์ผ ํจ. - ํธ๋ฆฌ ๋ณต๊ตฌ ๊ท์น
- ๋ฃจํธ ๋ ธ๋๋ ํญ์ 0์ผ๋ก ์ค์ ๋จ.
- x์ ์ผ์ชฝ ์์์ด ์กด์ฌํ๋ฉด ๊ฐ์ 2*x + 1
- x์ ์ค๋ฅธ์ชฝ ์์์ด ์กด์ฌํ๋ฉด ๊ฐ์ 2*x + 2
- ์๊ตฌ ์ฌํญ
- ๋ณต๊ตฌ๋ ํธ๋ฆฌ์์ find(x)๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉฐ, ํด๋น ๊ฐ์ด ์กด์ฌํ๋์ง O(1)์ ๊ฐ๊น๊ฒ ํ๋ณํด์ผ ํจ.
๐ ๋ฌธ์ ํ์ด
- ํธ๋ฆฌ ๋ณต๊ตฌ
- DFS ๋๋ BFS๋ฅผ ํ์ฉํ์ฌ ๋ฃจํธ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ๋ณต๊ตฌ.
- Set์ ํ์ฉํ์ฌ ๋ชจ๋ ๋ ธ๋ ๊ฐ์ ์ ์ฅ(๋น ๋ฅธ ํ์์ ์ํด).
- ๊ฐ ํ์ (find)
- Set์ ํด๋น ๊ฐ์ด ์๋์ง O(1) ์๊ฐ ๋ณต์ก๋๋ก ํ์.
- ๊ตฌํ ๋ฐฉ์
- 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);
}
}