
提示
1.二叉树中节点数目范围是 [1, 10^5] 。
2.每个节点权值的范围是 [-10^4, 10^4] 。
核心思路
代码
    //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/
原文:https://www.cnblogs.com/yh-simon/p/12906634.html