在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 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: 10 / \ 5 15 / \ \ 1 8 7 The Largest BST Subtree in this case is the highlighted one. Hint:
Follow up: 对于二叉树,找到最大的子树,即二叉搜索树(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 }
|
请发表评论