【每日一题Day305】LC1448统计二叉树中好节点的数目 | dfs

简介: 【每日一题Day305】LC1448统计二叉树中好节点的数目 | dfs

统计二叉树中好节点的数目【LC1448】

给你一棵根为 root二叉树,请你返回二叉树中好节点的数目。

「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。

  • 思路:dfs
    维护当前路径所有父节点中的最大值,如果最大值小于等于当前节点,那么更新最大值,数量+1;并递归至左右子树
  • 实现
/**
 * 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);
    }
    public int dfs(TreeNode root, int mx){
        if (root == null) return 0;
        int res = 0;
        if (root.val >= mx){
            res += 1;
            mx = root.val;
        }
        mx = Math.max(mx, root.val);
        res += dfs(root.left, mx);
        res += dfs(root.right, mx);
        return res;
    }
}

复杂度

时间复杂度:O ( n )

空间复杂度:O ( n )

目录
相关文章
|
7月前
【每日一题Day335】LC1993树上的操作 | dfs
【每日一题Day335】LC1993树上的操作 | dfs
49 0
|
7月前
|
机器学习/深度学习
【每日一题Day364】LC2003每棵子树内缺失的最小基因值 | dfs
【每日一题Day364】LC2003每棵子树内缺失的最小基因值 | dfs
57 0
|
7月前
【每日一题Day214】LC1080根到叶路径上的不足节点 | 递归
【每日一题Day214】LC1080根到叶路径上的不足节点 | 递归
51 0
|
7月前
【每日一题Day287】LC24 两两交换链表中的节点 | 模拟 递归
【每日一题Day287】LC24 两两交换链表中的节点 | 模拟 递归
49 0
|
7月前
|
人工智能 BI
【每日一题Day232】LC2699修改图中的边权 |最短路径
【每日一题Day232】LC2699修改图中的边权 |最短路径
42 0
|
7月前
【每日一题Day241】LC1254统计封闭岛屿的数目 | dfs
【每日一题Day241】LC1254统计封闭岛屿的数目 | dfs
50 1
|
7月前
|
算法
【每日一题Day235】LC1483树节点的第 K 个祖先 | 倍增
【每日一题Day235】LC1483树节点的第 K 个祖先 | 倍增
52 1
|
7月前
【每日一题Day269】LC1851包含每个查询的最小区间 | 排序+离线查询+小顶堆
【每日一题Day269】LC1851包含每个查询的最小区间 | 排序+离线查询+小顶堆
46 0
|
7月前
【每日一题Day286】LC21合并两个有序链表 | 链表模拟 递归
【每日一题Day286】LC21合并两个有序链表 | 链表模拟 递归
34 0
|
7月前
|
机器学习/深度学习
【每日一题Day181】LC1026节点与其祖先之间的最大差值 | 树形dp
【每日一题Day181】LC1026节点与其祖先之间的最大差值 | 树形dp
45 0