@@ -258,6 +258,59 @@ func closeLampInTree(root *TreeNode) (ans int) {
258258}
259259```
260260
261+ #### Swift
262+
263+ ``` swift
264+ /* public class TreeNode {
265+ * public var val: Int
266+ * public var left: TreeNode?
267+ * public var right: TreeNode?
268+ * public init(_ val: Int) {
269+ * self.val = val
270+ * self.left = nil
271+ * self.right = nil
272+ * }
273+ * }
274+ */
275+
276+ class Solution {
277+ func closeLampInTree (_ root : TreeNode? ) -> Int {
278+ return dfs (root)[0 ]
279+ }
280+
281+ private func dfs (_ root : TreeNode? ) -> [Int ] {
282+ var ans = [Int ](repeating : 0 , count : 4 )
283+ guard let root = root else {
284+ return ans
285+ }
286+
287+ let left = dfs (root.left )
288+ let right = dfs (root.right )
289+
290+ let l1 = left[0 ], l2 = left[1 ], l3 = left[2 ], l4 = left[3 ]
291+ let r1 = right[0 ], r2 = right[1 ], r3 = right[2 ], r4 = right[3 ]
292+
293+ if root.val != 0 {
294+ ans[0 ] = min (l1 + r1 + 1 , l2 + r2 + 1 , l3 + r3 + 1 , l4 + r4 + 3 )
295+ ans[1 ] = min (l1 + r1 + 2 , l2 + r2, l3 + r3 + 2 , l4 + r4 + 2 )
296+ ans[2 ] = min (l1 + r1, l2 + r2 + 2 , l3 + r3 + 2 , l4 + r4 + 2 )
297+ ans[3 ] = min (l1 + r1 + 1 , l2 + r2 + 1 , l3 + r3 + 3 , l4 + r4 + 1 )
298+ } else {
299+ ans[0 ] = min (l1 + r1, l2 + r2 + 2 , l3 + r3 + 2 , l4 + r4 + 2 )
300+ ans[1 ] = min (l1 + r1 + 1 , l2 + r2 + 1 , l3 + r3 + 3 , l4 + r4 + 1 )
301+ ans[2 ] = min (l1 + r1 + 1 , l2 + r2 + 1 , l3 + r3 + 1 , l4 + r4 + 3 )
302+ ans[3 ] = min (l1 + r1 + 2 , l2 + r2, l3 + r3 + 2 , l4 + r4 + 2 )
303+ }
304+
305+ return ans
306+ }
307+
308+ private func min (_ nums : Int ... ) -> Int {
309+ return nums.min () ?? Int .max
310+ }
311+ }
312+ ```
313+
261314<!-- tabs:end -->
262315
263316<!-- solution:end -->
0 commit comments