Skip to content

Commit d2ee6aa

Browse files
authored
feat: add swift implementation to lcof problem: No.07 (#2854)
1 parent 4db3cd4 commit d2ee6aa

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

lcof/面试题07. 重建二叉树/README.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,50 @@ public class Solution {
350350
}
351351
```
352352

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+
353397
<!-- tabs:end -->
354398

355399
<!-- solution:end -->
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

0 commit comments

Comments
 (0)