-
Notifications
You must be signed in to change notification settings - Fork 0
/
MostFrequent.java
36 lines (34 loc) · 1.05 KB
/
MostFrequent.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class MostFrequent {
static class State {
TreeNode maxValue;
int maxFreq;
TreeNode prevValue;
int prevCount;
State(TreeNode maxValue, int maxFreq, TreeNode prevValue, int prevCount) {
this.maxValue = maxValue;
this.maxFreq = maxFreq;
this.prevValue = prevValue;
this.prevCount = prevCount;
}
}
public TreeNode mostFrequent(TreeNode root) {
State state = new State(null, 0, null, 0);
inorder(root, state);
return state.maxValue;
}
private void inorder(TreeNode root, State state) {
if (root == null) return;
inorder(root.left, state);
if (prevValue == null || state.prevValue != root.val) {
state.prevValue = root;
state.prevCount = 1;
} else {
state.prevCount++;
}
if (state.prevCount > state.maxFreq) {
state.maxFreq = state.prevCount;
state.maxValue = state.prevValue;
}
inorder(root.right, state);
}
}