diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/README.md" index b850973fd3069..6a1e1c79f182e 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/README.md" @@ -348,6 +348,51 @@ public class Solution { } ``` +#### Swift + +```swift +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init() { +* self.val = 0 +* self.left = nil +* self.right = nil +* } +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { +* self.val = val +* self.left = left +* self.right = right +* } +* } +*/ + +class Solution { + private var ans = Int.min + + func maxPathSum(_ root: TreeNode?) -> Int { + _ = dfs(root) + return ans + } + + private func dfs(_ root: TreeNode?) -> Int { + guard let root = root else { + return 0 + } + let left = max(0, dfs(root.left)) + let right = max(0, dfs(root.right)) + ans = max(ans, root.val + left + right) + return root.val + max(left, right) + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/Solution.swift" new file mode 100644 index 0000000000000..366e01ee3faf3 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 051. \350\212\202\347\202\271\344\271\213\345\222\214\346\234\200\345\244\247\347\232\204\350\267\257\345\276\204/Solution.swift" @@ -0,0 +1,40 @@ +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init() { +* self.val = 0 +* self.left = nil +* self.right = nil +* } +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { +* self.val = val +* self.left = left +* self.right = right +* } +* } +*/ + +class Solution { + private var ans = Int.min + + func maxPathSum(_ root: TreeNode?) -> Int { + _ = dfs(root) + return ans + } + + private func dfs(_ root: TreeNode?) -> Int { + guard let root = root else { + return 0 + } + let left = max(0, dfs(root.left)) + let right = max(0, dfs(root.right)) + ans = max(ans, root.val + left + right) + return root.val + max(left, right) + } +} \ No newline at end of file