学习记录:js算法(五十一):统计二叉树中好节点的数目

news/2024/10/18 16:54:59/

文章目录

    • 统计二叉树中好节点的数目
      • 网上思路
    • 总结

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

给你一棵根为 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
解释:根节点是好节点。

我的思路
不会。。。
网上思路
递归

网上思路

var goodNodes = function(root) {let count = 0;function dfs(node, maxVal) {if (node === null) return;if (node.val >= maxVal) {count++;}maxVal = Math.max(maxVal, node.val);dfs(node.left, maxVal);dfs(node.right, maxVal);}dfs(root, -Infinity);return count;
};

讲解
要计算二叉树中好节点的数量,我们可以使用深度优先搜索(DFS)的方法,递归地遍历树中的每个节点。在遍历过程中,我们需要维护一个从根节点到当前节点的路径上的最大值。如果当前节点的值大于等于这个最大值,那么它就是一个好节点。接下来,我们更新最大值为当前节点的值,然后递归地遍历左右子树。

  1. 初始化:定义一个计数器 count 用于记录好节点的数量,以及一个最大值 maxVal 用于存储从根到当前节点路径上的最大值。
  2. 递归函数:定义一个递归函数 dfs(node, maxVal),它接收当前节点和最大值作为参数。
  3. 基本情况:如果当前节点 node 为空,直接返回。
  4. 更新计数器:如果当前节点的值大于等于 maxVal,则增加 count 计数器,表示找到了一个好节点。
  5. 更新最大值:更新 maxVal 为当前节点的值和 maxVal 中的较大者。
  6. 递归调用:递归地遍历左右子树,将更新后的 maxVal 传入。
  7. 返回结果:在主函数中,调用 dfs(root, -Infinity) 开始遍历,并返回 count

总结

国庆节快乐!


http://www.ppmy.cn/news/1533158.html

相关文章

camunda + oracle 启动报错 解决方法

启动报错如下: java.sql.SQLException: sql injection violation, comment not allow : select * from ( select a.*, ROWNUM rnum from (select RES.ID_,RES.REV_,RES.DUEDATE_,RES.PROCESS_INSTANCE_ID_,RES.EXCLUSIVE_from ACT_RU_JOB RESwhere (RES.RETRIES_ &g…

使用 Nexus 代理 Docker Hub 的配置指南

在本篇文章中,我们将详细介绍如何配置 Nexus 以代理 Docker Hub,从而实现更高效的镜像管理。以下步骤涵盖了从 Nexus 的安装到 Docker 客户端的配置。 1. 配置 Nexus 1.1 登录 Nexus 打开浏览器,访问 Nexus 的 URL(例如 http:/…

Spring Boot 驱动的在线订餐平台

第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于网上点餐系统所牵扯的管理及数据保存都是非常多的,例如管理员;首页、个人中心、用户管理、美食店管理、美食分类管理、美食信息管理、美食订单管理、美食评价管理…

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…

QT-GUI(1)- QPushButton-QLabel-QTreeWidget-QTableWidget

1.用VS2019编辑一个gui程序&#xff0c;QIcon 图标展示 示例&#xff1a; 方法1&#xff1a;硬代码写 1.创建新项目 2. 不在.qrc文件中添加.png文件 3.代码中写全路径&#xff1a; QTreeWidgetItem* lineItem new QTreeWidgetItem(stationItem);lineItem->setText(0, l…

telnet发送邮件教程:安全配置与操作指南?

telnet发送邮件的详细步骤&#xff1f;怎么用telnet命令发邮件&#xff1f; 尽管现代邮件客户端和服务器提供了丰富的功能和安全性保障&#xff0c;但在某些特定场景下&#xff0c;了解如何使用telnet发送邮件仍然是一项有价值的技能。AokSend将详细介绍如何安全配置和操作tel…

C++八股进阶

之前那个只是总结了一下常考点&#xff0c;这个是纯手打记笔记加深理解 这里写目录标题 C的四种智能指针为什么要使用智能指针&#xff1f;四种智能指针&#xff1a; C中的内存分配情况C中的指针参数传递和引用参数传递C 中 const 和 static 关键字&#xff08;定义&#xff0…

无人机避障——4D 毫米波雷达 SLAM篇(一)

做无人机避障相关工作&#xff0c;3D毫米波避障测试顺利后&#xff0c;开始做4D毫米波雷达无人机避障遇到4D雷达点云需要进行处理的问题&#xff0c;查阅文献&#xff0c;发现以下这篇文章中的建图方法应该为后续思考的方向&#xff0c;特此将这个开源项目进行复现和学习&#…