Good node를 찾기 위해서는 dfs 탐색과정에 현재까지의 max값을 가지고 다녀야 한다.
max는 순회 시마다 Math.max(max, next value)
로 갱신해준다.
node.val
값이 갱신한 값보다 크거나 같으면 해당 노드 값이 가장 크다고 볼 수 있으므로 이것은 Good node다.
단순히 good node 수를 찾는 문제이므로 따로 sum 변수를 스코프 밖으로 빼서 집계할 수 있도록 했다.
class Solution {
public int sum = 0;
public int goodNodes(TreeNode root) {
dfs(root, root.val);
return sum;
}
public void dfs(TreeNode node, int max) {
if (node == null) {
return;
}
if (node.val >= max) {
sum++;
}
if (node.left != null) {
dfs(node.left, Math.max(max, node.left.val));
}
if (node.right != null) {
dfs(node.right, Math.max(max, node.right.val));
}
}
}