def good_nodes(root):
def dfs(node,max_so_far):
if not node: return 0
good=1 if node.val>=max_so_far else 0
new_max=max(max_so_far,node.val)
return good+dfs(node.left,new_max)+dfs(node.right,new_max)
return dfs(root,root.val)
public int goodNodes(TreeNode root){
return dfs(root,root.val);
}
int dfs(TreeNode node,int maxSoFar){
if(node==null) return 0;
int good=node.val>=maxSoFar?1:0;
int newMax=Math.max(maxSoFar,node.val);
return good+dfs(node.left,newMax)+dfs(node.right,newMax);
}
Python nested function captures nothing. Java uses helper with parameters.
def good_nodes(root):
def dfs(node,max_so_far):
if not node: return 0
good=1 if node.val>=max_so_far else 0
new_max=max(max_so_far,node.val)
return good+dfs(node.left,new_max)+dfs(node.right,new_max)
return dfs(root,root.val)
public int goodNodes(TreeNode root){
return dfs(root,root.val);
}
int dfs(TreeNode node,int maxSoFar){
if(node==null) return 0;
int good=node.val>=maxSoFar?1:0;
int newMax=Math.max(maxSoFar,node.val);
return good+dfs(node.left,newMax)+dfs(node.right,newMax);
}
1. DFS tracking path max 2. Count nodes >= max so far