提示
1.二叉树中节点数目范围是 [1, 10^5] 。
2.每个节点权值的范围是 [-10^4, 10^4] 。
核心思路
- 二叉树+DFS
代码
//2ms
int ans = 0;
public int goodNodes(TreeNode root) {
int max=root.val;
TreeNode pre=root;
dfs(root, max,pre,root);
return ans;
}
public void dfs(TreeNode node,int max,TreeNode pre,TreeNode root){
max=Math.max(node.val,max);
if(node.val==max){
ans++;
}
if(node.left!=null){
pre=node;
if(pre==root) max=root.val;
dfs(node.left,max,pre,root);
}
if(node.right!=null){
pre=node;
if(pre==root) max=root.val;
dfs(node.right, max,pre,root);
}
}
优化
static int ans;
public int goodNodes(TreeNode root) {
ans = 0;
dfs(root, Integer.MIN_VALUE);
return ans;
}
private void dfs(TreeNode root, int cur_Max) { //cur_Max记录节点之前的最大值
if (root == null) return ;
cur_Max = Math.max(cur_Max, root.val); //当root.val >= cur_Max, cur_Max赋予当前节点的值,即cur_Max == root.val,该节点为“好节点”
if (cur_Max == root.val) ans++;
dfs(root.left, cur_Max);
dfs(root.right, cur_Max);
}
作者:imaginee
链接:https://leetcode-cn.com/problems/count-good-nodes-in-binary-tree/solution/java-di-gui-de-liang-chong-jie-fa-by-imaginee/