当前位置: 首页 > news >正文

LeetCode 1448. 统计二叉树中好节点的数目:DFS

【LetMeFly】1448.统计二叉树中好节点的数目

力扣题目链接:https://leetcode.cn/problems/count-good-nodes-in-binary-tree/

给你一棵根为 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, 10^5] 。
  • 每个节点权值的范围是 [-10^4, 10^4] 。

方法一:深度优先搜索(DFS)

给当前函数goodNodes添加一个默认值为“无穷小”的参数parentMax,用来记录当前节点的祖先节点中的最大值。

如果root为空,则返回0;

否则,更新parentMax为祖先节点和当前节点的最大值,并递归左右子即可。

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是二叉树的最大深度
  • 空间复杂度 O ( n ) O(n) O(n)

AC代码

C++

class Solution {
public:int goodNodes(TreeNode* root, int parentMax=-100000) {if (!root) {return 0;}int nowMax = max(parentMax, root->val);return (root->val >= parentMax) + goodNodes(root->left, nowMax) + goodNodes(root->right, nowMax);}
};

Python

# from typing import Optional# # Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def goodNodes(self, root: Optional[TreeNode], parentMax=-100000) -> int:if not root:return 0nowMax = max(root.val, parentMax)return (root.val >= parentMax) + self.goodNodes(root.left, nowMax) + self.goodNodes(root.right, nowMax)

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132491754

http://www.lryc.cn/news/140297.html

相关文章:

  • AR室内导航技术之技术说明与效果展示
  • 06-Numpy基础-线性代数
  • SpringBootWeb 登录认证
  • 【JVM 内存结构丨栈】
  • LeetCode 138.复制带随机指针的链表
  • 基于SSM的小说网站的设计与实现(论文+源码)_kaic
  • 【Python】代理池针对ip拦截破解
  • P1065 [NOIP2006 提高组] 作业调度方案
  • 设计模式三原则
  • dll载入时发生的事情
  • k8s-ingress-context deadline exceeded
  • css盒模型
  • cuda11.1和cuDNN v8.8.1的安装目录问题
  • 微信小程序scroll-view的触发机制
  • 为本地文件创建URL
  • UI位置与布局
  • 《存储IO路径》专题:DDIO对系统性能的影响
  • ModaHub魔搭社区:WinPlan经营大脑数据采集
  • 缓存最佳实践
  • Linux 终端命令之文件目录操作,对比Dos相关命令
  • C++学习第十八天----switch语句
  • 基于poi生成excel模板并生成下拉选择框
  • Redis五种类型
  • 通过IP地址如何防范钓鱼网站诈骗?
  • useEffect使用详解
  • element-table的动态操作,自动以表格,动态新增行、列,删除行列
  • python--文件管理系统
  • uniapp 微信小程序:RecorderManager 录音DEMO
  • __call__和__init__和__new__和__str__和__repr__
  • 设计模式--工厂模式(Factory Pattern)