5398.统计二叉树中好节点的数目

image-20200517172020176

提示

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/
posted @ 2020-05-17 20:15  YH_Simon  阅读(158)  评论(0编辑  收藏  举报