diff --git "a/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/README.md" "b/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/README.md" index a4c75c656f380..a9f6e64367f86 100644 --- "a/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/README.md" +++ "b/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/README.md" @@ -225,6 +225,49 @@ var maxValue = function (root, k) { }; ``` +#### Swift + +```swift +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +class Solution { + private var k: Int = 0 + + func maxValue(_ root: TreeNode?, _ k: Int) -> Int { + self.k = k + return dfs(root).max() ?? 0 + } + + private func dfs(_ root: TreeNode?) -> [Int] { + var ans = [Int](repeating: 0, count: k + 1) + guard let root = root else { + return ans + } + let l = dfs(root.left) + let r = dfs(root.right) + + ans[0] = (l.max() ?? 0) + (r.max() ?? 0) + + for i in 0.. diff --git "a/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/Solution.swift" "b/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/Solution.swift" new file mode 100644 index 0000000000000..f87a0e0b81867 --- /dev/null +++ "b/lcp/LCP 34. \344\272\214\345\217\211\346\240\221\346\237\223\350\211\262/Solution.swift" @@ -0,0 +1,38 @@ +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +class Solution { + private var k: Int = 0 + + func maxValue(_ root: TreeNode?, _ k: Int) -> Int { + self.k = k + return dfs(root).max() ?? 0 + } + + private func dfs(_ root: TreeNode?) -> [Int] { + var ans = [Int](repeating: 0, count: k + 1) + guard let root = root else { + return ans + } + let l = dfs(root.left) + let r = dfs(root.right) + + ans[0] = (l.max() ?? 0) + (r.max() ?? 0) + + for i in 0..