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

1. 题目描述

题目链接
在这里插入图片描述在这里插入图片描述

2. 解题思路

首先看一下题目的“核心”,什么是好节点:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。也就是说,我们只要知道了从根节点到该节点的所有的值,就可以判断该节点是不是好节点了。从根节点到x节点,很容易想到先序遍历(深度优先),先序遍历访问的顺序恰好是根节点到该节点的路径顺序,我们可以在递归遍历的过程中记录路径上的最大值,然后比较当前节点的值和路径上的最大值来确定是否为好节点。

如果当前节点的值大于或等于路径上的最大值,则将其计为好节点,并更新路径上的最大值;
否则,我们不将其计为好节点。

再递归遍历左、右子树时,我们分别传递更新后的路径上的最大值,这样可以确保路径上的最大值的更新在递归遍历中被正确传递和更新。

3. 代码

public class GoodNodes {/*给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。*/private int goodCount = 0; // 将好节点计数设置为类的成员变量public int goodNodes(TreeNode root) {countGoodNodes(root, Integer.MIN_VALUE); // 从根节点开始计算好节点return goodCount; // 返回累计的好节点数量}private void countGoodNodes(TreeNode node, int maxSoFar) {if (node == null) return; // 如果当前节点为空,则返回if (node.val >= maxSoFar) { // 如果当前节点的值大于或等于路径上的最大值goodCount++; // 将当前节点计为好节点maxSoFar = node.val; // 更新路径上的最大值为当前节点的值}// 递归遍历左子树和右子树,分别传递更新后的路径上的最大值countGoodNodes(node.left, maxSoFar);countGoodNodes(node.right, maxSoFar);}/*由于先序遍历访问的顺序恰好是根节点到该节点的路径顺序,我们可以在递归遍历的过程中记录路径上的最大值,然后比较当前节点的值和路径上的最大值来确定是否为好节点。如果当前节点的值大于或等于路径上的最大值,则将其计为好节点,并更新路径上的最大值;否则,我们不将其计为好节点。在递归遍历左右子树时,我们分别传递更新后的路径上的最大值,这样可以确保路径上的最大值的更新在递归遍历中被正确传递和更新。因此,通过修改先序遍历的代码来记录路径上的最大值,并比较节点的值和路径上的最大值,我们可以计算出好节点的数量。* */
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blender3.0 下载地址及安装教程

Blender是一款开源的3D计算机图形软件,广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能,让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出,使用户能够与其他软件进…

《AI编程类工具之二——ModelArts》

一.简介 ModelArts是华为云推出的面向AI开发者的一站式开发平台。它旨在为用户提供从数据处理、算法开发、模型训练到模型部署的全流程解决方案。 二.功能介绍 自动化超参调整和模型评估:ModelArts提供了自动化的超参调整功能,能够根据设定的参数范围…

中国建筑模板出口供应商

随着"一带一路"倡议的深入推进,中国基建企业"走出去"的步伐正在加快。与之相应,建筑模板产品作为工程建设的重要材料,其国际化供应也愈发受到重视。在众多建筑模板生产企业中,贵港市能强优品木业有限公司以其卓越的产品质量和丰富的出口经验,成为了国内知名…

MongoDB分片部署(windows)

OS:win10 MongoDB:4.4.24 分片架构 从图中可以看出,分片集群中主要由三个部分组成,即分片服务器( Shard )、路由服务器 ( Mongos )以及配置服务器( Config Server &am…

Vision GNN: An Image is Worth Graph of Nodes

感受野:在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的。 感受野并非越大越好,反而可能因为过大而过于发散梯度下降(Gradient Descent GD&am…

C#面:介绍 Hashtable 和 Dictionary的区别

Hashtable 和 Dictionary 都是 C# 中用于存储键值对的数据结构, 它们之间的区别如下: 1. 实现方式: Hashtable 是基于哈希表实现的,而 Dictionary 是基于泛型实现的。 2. 类型安全: Hashtable 是非泛型的&#xf…

简介:Asp.Net Core进阶高级编程教程

课程简介目录 🚀前言一、课程背景二、课程目的三、课程特点四、课程适合人员六、最后 🚀前言 本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…&#xff09…

设计模式(020)行为型之备忘录模式

备忘录模式是一种行为型设计模式,用于在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后可以将该对象恢复到之前的状态。这种模式通常用于需要记录对象状态历史、撤销操作或实现“回到过去”功能的场景。 在…

突破编程_前端_SVG(使用 svg-pan-zoom 库进行平移与缩放)

1 svg-pan-zoom 概述 svg-pan-zoom 是一个轻量级、高性能且易于使用的 JavaScript 库,专为增强 SVG 图像的浏览体验而设计。它提供了平移和缩放功能,使用户能够无缝探索大型或复杂的 SVG 图形。这个库允许用户对SVG图像进行交互操作,包括缩放…

企业数据模型应用:数字化转型的关键引擎

一、引言 在数字化浪潮席卷全球的今天,数据已经成为企业运营、决策和创新的核心要素。企业数据模型作为数据管理的核心工具,正逐渐成为企业数字化转型的重要引擎。本文将深入探讨企业数据模型的基本概念、应用场景、挑战与对策,以及其在数字…

NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]

NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL] Text-to-SQL(或者Text2SQL),顾名思义就是把文本转化为SQL语言,更学术一…

数据结构——双向循环链表

目录 前言 一、链表的分类 二、双向循环链表 2.1 开辟新的节点 2.2 链表初始化 2.3 打印链表 2.4 链表的尾插 2.5 链表的头插 2.6 链表的尾删 2.7 链表的头删 2.8 查找链表 2.9 在pos位置之后插入数据 2.10 删除pos位置的数据 三、完整代码实现 四、顺序表和双向…

[lesson37]智能指针分析

智能指针分析 永恒的话题 内存泄漏(臭名昭著的bug) 动态申请堆空间,用完后不归还C语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期 深度的思考 我们需要什么? 需要一个特殊的指针指针生命周期结束时主动释放堆空间一片堆空间最多只能由一…

Qt——【若按钮点击后无反应,UI界面中已经勾选Checkable属性, 并且调用了按钮的setchecked(false), 但是页面就是不切换状态

几经排查,发现是按钮组的Exclusive属性造成的。Exclusive属性执行后, 当有一个选中,并且没有选择其它按钮时,此按钮一直为选中状态。即使执行了按钮的setchecked(false)。 如果QAbstractButton属于独占组&a…

【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形

文章目录 C/C笔试练习选择部分(1)read函数(2)虚拟存储(3)用户态(4)线程特点(5)缺页处理(6)调度算法(7)进程优先…

IP地址和目标端口简介

IP地址和目标端口都是网络通信中重要的概念,它们共同作用来确保数据能够正确地传输到目标设备。 IP地址(Internet Protocol Address)是互联网上每个设备的唯一标识符。它由四个数字组成,每个数字之间用点(.&#xff0…

服务器Linux搭建NPM私有仓库

服务器Linux搭建NPM私有仓库 环境搭建 安装 nodejs nodejs官网:https://nodejs.org/en/download/package-manager 可以去官网自行下载nodejs的Linux版本,但是出于别的原因考虑,可以使用nvm去下载nodejs这样会切换nodejs也方便。 nvm 这…

ubuntu20.04基础镜像中jdk8.0中文乱码问题(需要加上ENV LANG C.UTF-8和ENV LC_ALL C.UTF-8)

文章目录 描述原因解决 描述 # 基础镜像 FROM ubuntu:20.04# 避免在安装过程中,有些程序需要交互式输入(如地区设置等) ARG DEBIAN_FRONTENDnoninteractive# 更新软件包列表,安装必要的软件包 RUN apt-get update && apt…

Android 混淆模板

保持对外门面类 -keep public class com.xx.devtools.middle.manager.DevLogManager { public *; } 保持model类 -keep public class com.xx.devtools.middle.model.** { public *; } -keep public class com.xx.devtools.middle.Globals { public *; } 保持Bus注册方法 -…

整数运算超越存储单元表示范围:上溢出、下溢出、回绕

示例&#xff1a; /*** brief how about integer-underflow-overflow? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <std…