zoukankan      html  css  js  c++  java
  • [LeetCode] 1448. Count Good Nodes in Binary Tree

    Given a binary tree root, a node X in the tree is named good if in the path from root to X there are no nodes with a value greater than X.

    Return the number of good nodes in the binary tree.

    Example 1:

    Input: root = [3,1,4,3,null,1,5]
    Output: 4
    Explanation: Nodes in blue are good.
    Root Node (3) is always a good node.
    Node 4 -> (3,4) is the maximum value in the path starting from the root.
    Node 5 -> (3,4,5) is the maximum value in the path
    Node 3 -> (3,1,3) is the maximum value in the path.

    Example 2:

    Input: root = [3,3,null,4,2]
    Output: 3
    Explanation: Node 2 -> (3, 3, 2) is not good, because "3" is higher than it.

    Example 3:

    Input: root = [1]
    Output: 1
    Explanation: Root is considered as good.

    Constraints:

    • The number of nodes in the binary tree is in the range [1, 10^5].
    • Each node's value is between [-10^4, 10^4].

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

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

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

    思路是DFS前序遍历,helper函数里除了当前节点,我们还需要带一个参数,表示当前这个路径上遇到的最大的节点值。其他部分跟一般的前序遍历的题没有太大区别。

    时间O(n)

    空间O(n)

    Java实现

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode() {}
     8  *     TreeNode(int val) { this.val = val; }
     9  *     TreeNode(int val, TreeNode left, TreeNode right) {
    10  *         this.val = val;
    11  *         this.left = left;
    12  *         this.right = right;
    13  *     }
    14  * }
    15  */
    16 class Solution {
    17     public int goodNodes(TreeNode root) {
    18         return helper(root, root.val);
    19     }
    20 
    21     private int helper(TreeNode root, int max) {
    22         if (root == null) {
    23             return 0;
    24         }
    25         int res = root.val >= max ? 1 : 0;
    26         res += helper(root.left, Math.max(max, root.val));
    27         res += helper(root.right, Math.max(max, root.val));
    28         return res;
    29     }
    30 }

    LeetCode 题目总结

  • 相关阅读:
    【40讲系列1】数组、链表
    更改凭证类型
    将公司代码设置给生产性的(不能删除业务数据的配置)
    使用参考过账
    查看凭证行项目
    查看凭证过账行项目
    预制凭证
    做凭证时凭证日期等于过账日期
    英语-20210302
    自动计算税额
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14503186.html
Copyright © 2011-2022 走看看