2026年--Lc336-1448. 统计二叉树中好节点的数目(树)--java版

1.题目


2.思路

时间复杂度:O(n),其中 n 为二叉树中的节点个数。在深度优先遍历的过程中,每个节点只会被遍历一次。

空间复杂度:O(n)。由于我们使用递归来实现深度优先遍历,因此空间复杂度的消耗主要在栈空间,取决于二叉树的高度,最坏情况下二叉树的高度为 O(n)。

在题目的定义中,从根到好节点所经过的节点中,没有任何节点的值大于好节点的值,等同于根节点到好节点的路径上所有节点(不包括好节点本身)的最大值小于等于好节点的值。

可以在深度优先遍历的过程中,记录从根节点到当前节点的路径上所有节点的最大值,若当前节点的值大于等于该最大值,则认为当前节点是好节点。

3.代码实现

java 复制代码
/**
 * 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) {
        if(root.left==null&&root.right==null)
        {
            return 1;
        }else if(root==null)
        {
            return 0;
        }else{
            return dfs(root,Integer.MIN_VALUE);
        } 
    }
    public int dfs(TreeNode root,int pathMax)
    {
        if(root==null)
        {
            return 0;
        }
        int res=0;
        if(root.val>=pathMax)
        {
            pathMax=root.val;
            res++;//计数器➕1
        }
        //递归遍历左右子树
        res=res+dfs(root.left,pathMax)+dfs(root.right,pathMax);
        return res;
    }
}
相关推荐
临床数据科学和人工智能兴趣组8 分钟前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go12 分钟前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
SL_staff18 分钟前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays101124 分钟前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找
geats人山人海35 分钟前
java 4继承
java·开发语言
aqiu1111111 小时前
【C++算法打怪专栏】C++ `unordered_set` 常用初始化与插入方法总结
开发语言·c++·算法
众链网络1 小时前
Agent 的成本大头不在“写“,在“判断“:拆解专用决策模型的三层架构
java·开发语言·人工智能·微服务
周小董1 小时前
[1371]jdk管理工具
java·开发语言
Terra.K1 小时前
高精度阶乘求和模板深度解析
开发语言·c++·算法
Hum8le1 小时前
漏洞知识点《php伪协议》
开发语言·安全·web安全·php