Leetcode 1373:二叉搜索子树的最大键值和(超详细的解法!!!)
发布日期:2021-06-29 15:58:46
浏览次数:2
分类:技术文章
本文共 1601 字,大约阅读时间需要 5 分钟。
给你一棵以 root
为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。
二叉搜索树的定义如下:
- 任意节点的左子树中的键值都 小于 此节点的键值。
- 任意节点的右子树中的键值都 大于 此节点的键值。
- 任意节点的左子树和右子树都是二叉搜索树。
示例 1:
输入:root = [1,4,3,2,4,2,5,null,null,null,null,null,null,4,6]输出:20解释:键值为 3 的子树是和最大的二叉搜索树。
示例 2:
输入: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
提示:
- 每棵树最多有
40000
个节点。 - 每个节点的键值在
[-4 * 10^4 , 4 * 10^4]
之间。
解题思路
这个问题和类似,定义函数 f ( r o o t ) f(root) f(root)返回以root
为根的树是不是二叉树,并且返回键值和(并不是返回二叉树的最大键值和)。
如果左子树是二叉树并且root.left.val < root.val
,说明当前root
为根可能是一颗二叉树,那么我们要将左子树的键值和添加;否则,当前root
为根的子树必然不是二叉树。如果右子树是二叉树并且root.right.val > root.val
,说明当前root
为根可能是一颗二叉树,那么我们要将右子树的键值和添加;否则,当前root
为根的子树必然不是二叉树。
判断完上述两种条件后,如果以root
为根的树为二叉树,我们需要记录当前键值和。最后返回以root
为根是不是二叉树,并且返回键值和。
class Solution: def maxSumBST(self, root: TreeNode) -> int: maxv = 0 def dfs(root): nonlocal maxv if not root: return True, 0 res = [True, root.val] if root.left: left = dfs(root.left) if left[0] and root.left.val < root.val: res[1] += left[1] else: res[0] = False if root.right: right = dfs(root.right) if right[0] and root.val < root.right.val: res[1] += right[1] else: res[0] = False if res[0]: maxv = max(maxv, res[1]) return res dfs(root) return maxv
我将该问题的其他语言版本添加到了我的
如有问题,希望大家指出!!!
转载地址:https://coordinate.blog.csdn.net/article/details/104762036 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月19日 16时19分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OpenCV+python识别并打印HSV颜色
2019-04-29
2021-03-29
2019-04-29
网络攻击与防御--引言
2019-04-29
网络攻击与防御--网络协议漏洞
2019-04-29
sql注入: 判断注入点类型
2019-04-29
千人千面Elasticsearch实战学习笔记
2019-04-29
最大子数组问题(递归)(java)
2019-04-29
2021年第十二届蓝桥杯软件赛省赛第二场 C/C++ 大学 A 组
2019-04-29
2020年哨兵数据批量下载(USGS)
2019-04-29
简单3步快速生成千万级别mysql测试数据库,模拟电商数据
2019-04-29
EasyDSS平台接入设备量过多的情况下如何进行批量推流测试?
2019-04-29
mysql数据库操作基础
2019-04-29
Mariadb基础管理
2019-04-29
awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
2019-04-29
CentOS系统内核升级攻略
2019-04-29
linux系统时区修改(Debian的主机和docker)
2019-04-29