LC-1373. 二叉搜索子树的最大键值和(后序遍历)

news2024/11/17 14:00:15

1373. 二叉搜索子树的最大键值和

难度困难173

给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。

二叉搜索树的定义如下:

  • 任意节点的左子树中的键值都 小于 此节点的键值。
  • 任意节点的右子树中的键值都 大于 此节点的键值。
  • 任意节点的左子树和右子树都是二叉搜索树。

示例 1:

img

输入:root = [1,4,3,2,4,2,5,null,null,null,null,null,null,4,6]
输出:20
解释:键值为 3 的子树是和最大的二叉搜索树。

示例 2:

img

输入:root = [4,3,null,1,2]
输出:2
解释:键值为 2 的单节点子树是和最大的二叉搜索树。

示例 3:

输入:root = [-4,-2,-5]
输出:0
解释:所有节点键值都为负数,和最大的二叉搜索树为空。

示例 4:

输入:root = [2,1,3]
输出:6

示例 5:

输入:root = [5,4,8,3,null,6,3]
输出:7

提示:

  • 每棵树有 140000 个节点。
  • 每个节点的键值在 [-4 * 10^4 , 4 * 10^4] 之间。

题解:

https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree/solution/hou-xu-bian-li-pythonjavacgo-by-endlessc-gll3/

前置:

98. 验证二叉搜索树,用后序遍历实现。

每棵子树返回:

  • 这棵子树的最小节点值。
  • 这棵子树的最大节点值。
  • 这棵子树的所有节点值之和。

如果左子树的最大值 > 当前节点值,或者右子树的最小值 < 当前节点值,都不符合二又搜索树的定义,那么当前这棵子树不是二又搜索树此时可以返 -inf, inf, 0 (第三个数随意) 。这种返回值可以简化代码,对于父节点,同样通过判断子树的最小值/最大值和当前节点值的大小关系,就可以知道子树是否为二叉搜索树了

如果当前子树是二叉搜索树,那么把左右子树的节点值之和,加上当前节点值,去更新答案的最大值,并作为当前子树的所有节点值之和,返回给父节点

class Solution {
    int ans; //  二叉搜索树可以为空
    public int maxSumBST(TreeNode root) {
        dfs(root);
        return ans;
    }
    // int[] : 左子树的最大值, 右子树的最小值, 该子树所有节点值之和
    public int[] dfs(TreeNode node){
        if(node == null){
            return new int[]{Integer.MAX_VALUE, Integer.MIN_VALUE, 0};
        }
        int[] left = dfs(node.left); // 递归左子树
        int[] right = dfs(node.right); // 递归右子树
        int x = node.val;
        if(x <= left[1] || x >= right[0]){ // 不是二叉搜索树
        // 小于等于左边最大值 或者 大于等于右边最小值 : 都是不合法的
            return new int[]{Integer.MIN_VALUE, Integer.MAX_VALUE, 0};
        }
        int s = left[2] + right[2] + x; // 这棵子树的所有节点值之和
        ans = Math.max(ans, s);
        return new int[]{Math.min(left[0], x), Math.max(right[1], x), s};
    }
}

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

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

相关文章

IP协议详解之IP地址要领

整个的因特网就是一个单一的、抽象的网络。而IP地址就是给因特网上的每一个主机&#xff08;或路由器&#xff09;的每一个接口分配一个在全世界范围是唯一的32位的标识符。IP地址的结构使我们可以在因特网上很方便地进行寻址。但是&#xff0c;根据TCP/IP协议的规定的IP地址是…

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok

【Flutter 工程】002-代码生成&#xff1a;Freezed ——类似 Java 的 lombok 文章目录 【Flutter 工程】002-代码生成&#xff1a;Freezed ——类似 Java 的 lombok一、概述1、简介2、主要功能3、主页与使用前后比较主页使用前使用后 二、基本使用1、安装2、改造 main.dart3、创…

pygam第4课——颜色监测(迷宫小游戏)

前言&#xff1a;前三节课我们学习了&#xff0c;窗口的创建、图片的加载、常用鼠标事件的等。今天我们学一个颜色的监测&#xff0c;并自制一个迷宫小游戏。那我们一下来看看吧 前面的三节课在这里&#xff0c;大家记得关注收藏一下&#xff1a; 视频演示 1、界面搭建 背景图…

开发者关系工程师如何帮助开发者在Sui上构建

近期&#xff0c;我们与Sui开发者关系负责人Brian Hennessey-Hsien进行了对话&#xff0c;就Sui上的开源、去中心化和开发者成就等话题展开讨论。 日前&#xff0c;我们采访了Sui基金会的开发者关系负责人Brian Hennessey-Hsieh&#xff0c;共同探讨了其对于Web3中开发者发展历…

冷热温度正反向控制技术在换热器热疲劳试验中的应用

摘要&#xff1a;空调换热器需要进行可靠性试验以满足整机产品在不同环境下的寿命周期&#xff0c;温度交变试验是可靠性试验中是较为关键的一项。本文在现有PLC交变温度控制技术基础上&#xff0c;提出了一种模块式的改进解决方案&#xff0c;即增加了专用的高精度PID调节器分…

不入耳耳机的正确打开方式,韶音OpenFit诠释耳机的“舒适圈”

文 | 智能相对论 作者 | 佘凯文 总有人说&#xff0c;人们需要跳出舒适圈&#xff0c;逼着自己去不断挑战。也有人问&#xff0c;我满足现状&#xff0c;为什么要跳出舒适圈&#xff1f;说到底&#xff0c;两种说法都没有错&#xff0c;不过该不该走出舒适圈或许也得分“场合…

麻了,最好不要去外包,干了三年,废了一半......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【coding加油站】vue单页面图书管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

数据结构课程设计——运动会分数统计

运动会分数统计 数据结构课程设计任务书 学生姓名&#xff1a;xxx 专业班级&#xff1a;软件工程 指导教师&#xff1a; 工作单位&#xff1a; 题 目: 运动会分数统计 基础要求&#xff1a; 要求具有C语言的理论基础…

ProtoBuf安装及避坑指南

文章目录 安装前注意事项(避坑)ProtoBuf在Linux下的安装protoBuf 测试demo 安装前注意事项(避坑) 1.安装前&#xff0c;我们需要升级g&#xff0c;使用较新的g编译器。 2.在安装过程中&#xff0c;出现问题&#xff0c;可以选择安装其他版本&#xff0c;在加压文件下执行make …

NFTScan:05.15~05.21 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.05.15 ~ 2023.05.21 NFT Hot News&#xff1a;NFT 热点资讯 01/ DID 解决方案提供商 Lifeform 以 3 亿美元估值完成 IDG Capital 领投的 B 轮融资 5 月 15 日&#xff0c;去中心化…

Rocketmq常用使用场景

RocketMQ 是阿里开源的分布式消息中间件&#xff0c;跟其它中间件相比&#xff0c;RocketMQ 的特点是纯JAVA实现 基础概念 Producer&#xff1a; 消息生产者&#xff0c;负责产生消息&#xff0c;一般由业务系统负责产生消息 Producer Group&#xff1a; 消息生产者组&#xf…

ESP32CAM---利用Vscode阅读源码

前言 &#xff08;1&#xff09;首先&#xff0c;我在此吐槽一些&#xff0c;arduino平台的代码阅读功能&#xff0c;是真滴垃圾。气死我了。配置这玩意搞了半天&#xff0c;还没搞好。 &#xff08;2&#xff09;最后我决定使用Vscode阅读arduino的代码。arduino IDE负责编译程…

智能工厂已成为制造业数字化转型的重心

我国“十四五”规划纲要提出&#xff0c;要深入实施智能制造和绿色制造工程&#xff0c;发展服务型制造新模式&#xff0c;推动制造业高端化智能化绿色化。随着5G等新一代信息技术与制造业不断深度融合&#xff0c;制造业的智能化发展成为未来我国制造业转型升级的重要方向。《…

MyBatisPlus快速入门(一)MyBatisPlus简介、历史和优势

一、什么是 MyBatisPlus&#xff1f;二、MyBatisPlus 相关文档2.1 官网2.2 Github源码2.3 官方文档 三、MyBatisPlus 的历史四、MyBatisPlus 的特性和优势4.1 特性4.2 优势 五、如何学习 MyBatisPlus & 专栏计划 一、什么是 MyBatisPlus&#xff1f; MyBatisPlus&#xff…

MyBatis中使用第三方分页插件PageHelper完成分页功能

文章目录 一、前言二、基于插件拦截方式1、自定义插件2、使用第三方插件完成分页1、分页插件的配置2、分页插件的使用 一、前言 分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的&#xff0c;不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据…

2023年4月CSDN客服月报|解决3个重大问题和26个次要问题,采纳1个用户建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉报告》第19期&#xff0c;接下来就请大家一同回顾我们4月份解决的bug&#xff5e; 一、重大问题 1、【猿如意】ChitGPT近期老是提示“我回答不过来”的问题 反馈量&#xff1a;10 2、…

【星戈瑞】Sulfo-Cyanine7 maleimide磺化CY7标记马来酰亚胺

水溶性Cyanine7 mal是一种常用的细胞标记物&#xff0c;可以被用于细胞荧光成像等应用中。它的分子结构中含有Cyanine7和mal两部分&#xff0c;其中Cyanine7是一种红外荧光染料&#xff0c;可以发出红外光&#xff0c;而mal则是一种水溶性的化合物&#xff0c;可以使Cyanine7分…

响应式与自适应的区别

响应式与自适应的区别&#xff1a; 响应式&#xff1a;一套适配多端适配不同的屏幕设备&#xff0c;即不同的视口分辨率 自适应&#xff1a;多套页面不同视口分辨率大小显示同样的网页rem、百分比等相对单位 注意&#xff1a; 在开发中&#xff0c;项目的响应式&#xff0c;一些…

Java技术接单

今天给大家介绍一个阶段性&#xff08;周期性&#xff09;能获取一定收益的Java技术接单群&#xff0c;分享给大家&#xff01;主要对搞Java的粉丝有帮助&#xff0c;因为可以赚点小钱&#xff0c;对Java技术的要求不高&#xff01; 那些感兴趣或者想直接加技术群的我给大家讲一…