Leetcode Java Find Elements in a Contaminated Binary Tree
업데이트:
문제
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class FindElements {
private BitSet bitSet;
public FindElements(TreeNode root) {
root.val = 0;
this.bitSet = new BitSet();
this.bfs(root);
}
public boolean find(int target) {
return this.bitSet.get(target);
}
private void bfs(TreeNode node) {
this.bitSet.set(node.val);
if (node.left != null) {
node.left.val = (2 * node.val) + 1;
this.bfs(node.left);
}
if (node.right != null) {
node.right.val = (2 * node.val) + 2;
this.bfs(node.right);
}
}
}
/**
* Your FindElements object will be instantiated and called as such:
* FindElements obj = new FindElements(root);
* boolean param_1 = obj.find(target);
*/
결과
설명
- 모든 값이 -1로 변환된 이진 트리의 구조가 입력되면 아래의 규칙을 만족하는 값을 가진 이진 트리로 복구하는 객체를 완성하는 문제이다.
- root의 val 값은 0이다.
- treeNode의 값이 x이고 left 노드가 null이 아닌 경우, left 노드의 val 값은 $2 \times x + 1$ 값이 된다.
- treeNode의 값이 x이고 right 노드가 null이 아닌 경우, right 노드의 val 값은 $2 \times x + 2$ 값이 된다.
- 생성자인 FindElements(TreeNode root)는 오염된 객체를 초기화하고 복구한다.
- 메서드인 find(int target)는 복구된 이진 트리에서 target 값이 존재하는지 검증한다.
-
전역 변수인 bitSet은 비트 단위로 값을 저장하고 해당 값이 존재하는지 여부를 저장할 변수이다.
- 생성자인 FindElements(TreeNode root)를 완성한다.
- root의 val 값을 0으로 넣어준다.
- bitSet에 값 존재를 검증하기 효율적인 객체인 BitSet으로 초기화한다.
- 4번에서 정의한 bfs(TreeNode node) 메서드를 수행하여 이진 트리를 복구한다.
- BFS 방식으로 이진 트리를 복구하기 위한 bfs(TreeNode node) 메서드를 정의한다.
- bitSet에 node의 val 값을 넣어준다.
- node의 left 노드가 존재하는 경우, 해당 노드의 val 값에 $(2 \times x) + 1$을 넣어준 후 해당 노드로 재귀 호출을 수행한다.
- node의 right 노드가 존재하는 경우, 해당 노드의 val 값에 $(2 \times x) + 2$을 넣어준 후 해당 노드로 재귀 호출을 수행한다.
- 메서드인 find(int target)를 완성한다.
- bitSet에서 target 값이 존재하는지 여부를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기