File tree Expand file tree Collapse file tree 2 files changed +83
-0
lines changed Expand file tree Collapse file tree 2 files changed +83
-0
lines changed Original file line number Diff line number Diff line change @@ -350,6 +350,50 @@ public class Solution {
350
350
}
351
351
```
352
352
353
+ #### Swift
354
+
355
+ ``` swift
356
+ /* public class TreeNode {
357
+ * public var val: Int
358
+ * public var left: TreeNode?
359
+ * public var right: TreeNode?
360
+ * public init(_ val: Int) {
361
+ * self.val = val
362
+ * self.left = nil
363
+ * self.right = nil
364
+ * }
365
+ * }
366
+ */
367
+
368
+ class Solution {
369
+ private var d = [Int : Int ]()
370
+ private var preorder: [Int ] = []
371
+ private var inorder: [Int ] = []
372
+
373
+ func buildTree (_ preorder : [Int ], _ inorder : [Int ]) -> TreeNode? {
374
+ let n = inorder.count
375
+ for i in 0 ..< n {
376
+ d[inorder[i]] = i
377
+ }
378
+ self .preorder = preorder
379
+ self .inorder = inorder
380
+ return dfs (0 , 0 , n)
381
+ }
382
+
383
+ private func dfs (_ i : Int , _ j : Int , _ n : Int ) -> TreeNode? {
384
+ if n < 1 {
385
+ return nil
386
+ }
387
+ let k = d[preorder[i]]!
388
+ let l = k - j
389
+ let root = TreeNode (preorder[i])
390
+ root.left = dfs (i + 1 , j, l)
391
+ root.right = dfs (i + 1 + l, k + 1 , n - l - 1 )
392
+ return root
393
+ }
394
+ }
395
+ ```
396
+
353
397
<!-- tabs: end -->
354
398
355
399
<!-- solution: end -->
Original file line number Diff line number Diff line change
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
+
13
+ class Solution {
14
+ private var d = [ Int: Int] ( )
15
+ private var preorder : [ Int ] = [ ]
16
+ private var inorder : [ Int ] = [ ]
17
+
18
+ func buildTree( _ preorder: [ Int ] , _ inorder: [ Int ] ) -> TreeNode ? {
19
+ let n = inorder. count
20
+ for i in 0 ..< n {
21
+ d [ inorder [ i] ] = i
22
+ }
23
+ self . preorder = preorder
24
+ self . inorder = inorder
25
+ return dfs ( 0 , 0 , n)
26
+ }
27
+
28
+ private func dfs( _ i: Int , _ j: Int , _ n: Int ) -> TreeNode ? {
29
+ if n < 1 {
30
+ return nil
31
+ }
32
+ let k = d [ preorder [ i] ] !
33
+ let l = k - j
34
+ let root = TreeNode ( preorder [ i] )
35
+ root. left = dfs ( i + 1 , j, l)
36
+ root. right = dfs ( i + 1 + l, k + 1 , n - l - 1 )
37
+ return root
38
+ }
39
+ }
You can’t perform that action at this time.
0 commit comments