• LeetCode_二叉树_中等_1448.统计二叉树中好节点的数目


    1.题目

    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。

    示例 1:
    在这里插入图片描述
    输入:root = [3,1,4,3,null,1,5]
    输出:4
    解释:图中蓝色节点为好节点。
    根节点 (3) 永远是个好节点。
    节点 4 -> (3,4) 是路径中的最大值。
    节点 5 -> (3,4,5) 是路径中的最大值。
    节点 3 -> (3,1,3) 是路径中的最大值。

    示例 2:
    在这里插入图片描述
    输入:root = [3,3,null,4,2]
    输出:3
    解释:节点 2 -> (3, 3, 2) 不是好节点,因为 “3” 比它大。

    示例 3:
    输入:root = [1]
    输出:1
    解释:根节点是好节点。

    提示:
    二叉树中节点数目范围是 [1, 105] 。
    每个节点权值的范围是 [-104, 104] 。

    2.思路

    (1)DFS

    • 在深度优先遍历的过程中,记录从根节点到当前节点的路径上所有节点的最大值,若当前节点的值大于等于该最大值,则认为当前节点是好节点。
    • 具体来说,定义递归函数求解以某个节点为根的子树中,好节点的个数。递归函数的参数为根节点以及路径上的最大值,若当前节点的值大于等于该最大值,则将答案加一,并更新路径最大值为当前节点的值。紧接着递归遍历左右子树时,将最大值以参数的形式传递下去。递归返回的结果需要累加到答案中。
    • 最终,我们以根节点为入口,无穷小为路径最大值去调用递归函数,所得到的返回值即为答案。

    3.代码实现(Java)

    //思路1————DFS
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public int goodNodes(TreeNode root) {
            return dfs(root, Integer.MIN_VALUE);
        }
    
        private int dfs(TreeNode root, int pathMax) {
            if (root == null) {
                return 0;
            }
            int res = 0;
            if (root.val >= pathMax) {
                res++;
                pathMax = root.val;
            }
            res += dfs(root.left, pathMax) + dfs(root.right, pathMax);
            return res;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    Django—图片验证码
    软考-信息安全工程师-2
    Vue3中通过 input 标签 发送文件/图片给后端
    时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测
    java计算机毕业设计基于安卓Android/微信小程序的英语单词学习APP系统
    编写可扩展的软件:架构和设计原则
    电脑检测温度软件有哪些?
    吃透阿里大佬私藏的这本 Java 进阶核心手册, 侥幸入职 P7
    51单片机DS1302时钟
    NFS服务详解
  • 原文地址:https://blog.csdn.net/weixin_43004044/article/details/133232983