728x90
class Solution {
public int[] findMode(TreeNode root) {
List<Integer> values = new ArrayList();
dfs(root, values);
int maxStreak = 0;
int currStreak = 0;
int currNum = 0;
List<Integer> ans = new ArrayList();
for (int num : values) {
if (num == currNum) {
currStreak++;
} else {
currStreak = 1;
currNum = num;
}
if (currStreak > maxStreak) {
ans.clear();
maxStreak = currStreak;
}
if (currStreak == maxStreak) {
ans.add(num);
}
}
int[] result = new int[ans.size()];
for (int i = 0; i < ans.size(); i++) {
result[i] = ans.get(i);
}
return result;
}
public void dfs(TreeNode node, List<Integer> values) {
if (node == null) {
return;
}
dfs(node.left, values);
values.add(node.val);
dfs(node.right, values);
}
}
in-order traversal을 사용하여 오름차순으로 트리를 순회한다.
오름차순으로 정렬이 되어있는 상태이기 때문에 리스트를 순회하기 좀 더 편하다
오름차순으로 생성된 리스트를 돌면서
각 값들이 몇번이나 나타나는지 체크한다.
등장수가 적다면 넘어가고,
등장수가 같다면 modes를 담아두는 리스트에 추가하고
등장수가 더 많다면 기존 modes 리스트를 지우고 해당 값을 추가한다.
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스] 가장 긴 팰린드롬 (0) | 2023.12.08 |
---|---|
[LeetCode] 145. Binary Tree Postorder Traversal (0) | 2023.12.06 |
[LeetCode] 144. Binary Tree Preorder Traversal (0) | 2023.12.05 |
[LeetCode] 94. Binary Tree Inorder Traversal (0) | 2023.12.05 |
[LeetCode] 111. Minimum Depth of Binary Tree (0) | 2023.12.05 |