Leetcode Java Find Mode in Binary Search Tree
업데이트:
문제
코드
class Solution {
private int max = 0;
private int count = 1;
private TreeNode prev = null;
public int[] findMode(TreeNode root) {
List<Integer> list = new ArrayList<>();
this.dfs(root, list);
int[] result = new int[list.size()];
for (int idx = 0; idx < list.size(); idx++) {
result[idx] = list.get(idx);
}
return result;
}
public void dfs(TreeNode node, List<Integer> list) {
if (node == null) {
return;
}
this.dfs(node.left, list);
if (this.prev != null) {
if (node.val == this.prev.val) {
this.count++;
} else {
this.count = 1;
}
}
if (this.count > this.max) {
list.clear();
list.add(node.val);
this.max = this.count;
} else if (this.count == this.max) {
list.add(node.val);
}
this.prev = node;
this.dfs(node.right, list);
}
}
결과
설명
-
중복된 값이 있는 root를 이용하여 가장 많이 반복된 숫자를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- max는 최대 반복 횟수를 저장할 변수로, 0으로 초기화한다.
- count는 현재 숫자의 반복 횟수를 계산할 변수로, 1로 초기화한다.
- prev는 현재 노드를 저장하고 다음 탐색을 진행하기 위한 변수로, null로 초기화한다.
-
결과를 저장할 list를 ArrayList로 초기화하여 4번에서 정의한 dfs(TreeNode node, List
list) 메서드를 수행한다. - DFS 방식으로 가장 많이 반복된 숫자를 구할 dfs(TreeNode node, List
list) 메서드를 정의한다. - node가 null인 경우, 수행을 중지한다.
- node의 left TreeNode를 이용하여 재귀 호출을 수행한다.
- prev가 null이 아닌 경우, node의 val과 prev의 val이 동일하면 count를 증가시키고 아니면 count를 1로 초기화한다.
- count가 max보다 크면 현재 숫자의 반복 횟수가 더 크므로, list를 초기화 후 list에 node의 val 값을 넣어주고 max에 count를 넣어준다.
- count가 max와 동일한 경우 반복 횟수가 동일한 값이므로, list에 node의 val 값을 넣어준다.
- prev에 node를 넣어주고 node의 right TreeNode로 재귀 호출을 수행한다.
- 위의 수행이 완료되면 list의 값들을 정수 배열에 넣어 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기