[Swift]LeetCode333. 最大的二分搜索子树 $ Largest BST Subtree
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10706954.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it.
Note:
A subtree must include all of its descendants.
Here's an example:
10 / \ 5 15 / \ \ 1 8 7
The Largest BST Subtree in this case is the highlighted one.
The return value is the subtree's size, which is 3.
Hint:
- You can recursively use algorithm similar to 98. Validate Binary Search Tree at each node of the tree, which will result in O(nlogn) time complexity.
Follow up:
Can you figure out ways to solve it with O(n) time complexity?
对于二叉树,找到最大的子树,即二叉搜索树(BST),其中最大的子树表示其中节点数最多的子树。
注:
子树必须包含其所有后代。
下面是一个例子:
10 / \ 5 15 / \ \ 1 8 7
在这种情况下,最大的BST子树是突出显示的子树。
返回值是子树的大小,即3。
提示:
您可以递归地使用类似于98的算法。在树的每个节点验证二进制搜索树,这将导致O(nlogn)时间复杂性。
跟进:
你能想出解决O(N)时间复杂性问题的方法吗?
Solution:
1 public class TreeNode { 2 public var val: Int 3 public var left: TreeNode? 4 public var right: TreeNode? 5 public init(_ val: Int) { 6 self.val = val 7 self.left = nil 8 self.right = nil 9 } 10 } 11 12 class Solution { 13 func largestBSTSubtree(_ root: TreeNode?) -> Int { 14 var res:[Int] = helper(root) 15 return res[2] 16 } 17 18 func helper(_ node: TreeNode?) -> [Int] 19 { 20 if node == nil 21 { 22 return [Int.max,Int.min,0] 23 } 24 var left:[Int] = helper(node?.left) 25 var right:[Int] = helper(node?.right) 26 if node!.val > left[1] && node!.val < right[0] 27 { 28 return [min(node!.val, left[0]), max(node!.val, right[1]), left[2] + right[2] + 1] 29 } 30 else 31 { 32 return [Int.min, Int.max, max(left[2], right[2])] 33 } 34 } 35 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了