Skip to content

Commit e6d7959

Browse files
authored
feat: add swift implementation to lcof problem: No.36 (doocs#2906)
1 parent 01ad679 commit e6d7959

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed

lcof/面试题36. 二叉搜索树与双向链表/README.md

+60
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,66 @@ public class Solution {
344344
}
345345
```
346346

347+
#### Swift
348+
349+
```swift
350+
/* Definition for a Node.
351+
* public class Node {
352+
* public var val: Int
353+
* public var left: Node?
354+
* public var right: Node?
355+
356+
* public init() {
357+
* self.val = 0
358+
* self.left = nil
359+
* self.right = nil
360+
* }
361+
362+
* public init(_ val: Int) {
363+
* self.val = val
364+
* self.left = nil
365+
* self.right = nil
366+
* }
367+
368+
* public init(_ val: Int, _ left: Node?, _ right: Node?) {
369+
* self.val = val
370+
* self.left = left
371+
* self.right = right
372+
* }
373+
* }
374+
*/
375+
376+
class Solution {
377+
private var head: Node?
378+
private var pre: Node?
379+
380+
func treeToDoublyList(_ root: Node?) -> Node? {
381+
if root == nil {
382+
return nil
383+
}
384+
dfs(root)
385+
head?.left = pre
386+
pre?.right = head
387+
return head
388+
}
389+
390+
private func dfs(_ root: Node?) {
391+
guard let root = root else {
392+
return
393+
}
394+
dfs(root.left)
395+
if let preNode = pre {
396+
preNode.right = root
397+
} else {
398+
head = root
399+
}
400+
root.left = pre
401+
pre = root
402+
dfs(root.right)
403+
}
404+
}
405+
```
406+
347407
<!-- tabs:end -->
348408

349409
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/* Definition for a Node.
2+
* public class Node {
3+
* public var val: Int
4+
* public var left: Node?
5+
* public var right: Node?
6+
7+
* public init() {
8+
* self.val = 0
9+
* self.left = nil
10+
* self.right = nil
11+
* }
12+
13+
* public init(_ val: Int) {
14+
* self.val = val
15+
* self.left = nil
16+
* self.right = nil
17+
* }
18+
19+
* public init(_ val: Int, _ left: Node?, _ right: Node?) {
20+
* self.val = val
21+
* self.left = left
22+
* self.right = right
23+
* }
24+
* }
25+
*/
26+
27+
class Solution {
28+
private var head: Node?
29+
private var pre: Node?
30+
31+
func treeToDoublyList(_ root: Node?) -> Node? {
32+
if root == nil {
33+
return nil
34+
}
35+
dfs(root)
36+
head?.left = pre
37+
pre?.right = head
38+
return head
39+
}
40+
41+
private func dfs(_ root: Node?) {
42+
guard let root = root else {
43+
return
44+
}
45+
dfs(root.left)
46+
if let preNode = pre {
47+
preNode.right = root
48+
} else {
49+
head = root
50+
}
51+
root.left = pre
52+
pre = root
53+
dfs(root.right)
54+
}
55+
}

0 commit comments

Comments
 (0)