@@ -258,6 +258,59 @@ func closeLampInTree(root *TreeNode) (ans int) {
258
258
}
259
259
```
260
260
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
+
261
314
<!-- tabs:end -->
262
315
263
316
<!-- solution:end -->
0 commit comments