Skip to content

Commit 705c0f0

Browse files
authored
feat: add swift implementation to lcof problem: No.26 (doocs#2893)
1 parent 6717751 commit 705c0f0

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

lcof/面试题26. 树的子结构/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,44 @@ public class Solution {
345345
}
346346
```
347347

348+
#### Swift
349+
350+
```swift
351+
/* public class TreeNode {
352+
* var val: Int
353+
* var left: TreeNode?
354+
* var right: TreeNode?
355+
* init(_ val: Int) {
356+
* self.val = val
357+
* self.left = nil
358+
* self.right = nil
359+
* }
360+
* }
361+
*/
362+
363+
class Solution {
364+
func isSubStructure(_ A: TreeNode?, _ B: TreeNode?) -> Bool {
365+
guard let A = A, let B = B else {
366+
return false
367+
}
368+
return dfs(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B)
369+
}
370+
371+
private func dfs(_ A: TreeNode?, _ B: TreeNode?) -> Bool {
372+
if B == nil {
373+
return true
374+
}
375+
guard let A = A else {
376+
return false
377+
}
378+
if A.val != B!.val {
379+
return false
380+
}
381+
return dfs(A.left, B?.left) && dfs(A.right, B?.right)
382+
}
383+
}
384+
```
385+
348386
<!-- tabs:end -->
349387

350388
<!-- solution:end -->
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/* public class TreeNode {
2+
* var val: Int
3+
* var left: TreeNode?
4+
* var right: TreeNode?
5+
* init(_ val: Int) {
6+
* self.val = val
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* }
11+
*/
12+
13+
class Solution {
14+
func isSubStructure(_ A: TreeNode?, _ B: TreeNode?) -> Bool {
15+
guard let A = A, let B = B else {
16+
return false
17+
}
18+
return dfs(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B)
19+
}
20+
21+
private func dfs(_ A: TreeNode?, _ B: TreeNode?) -> Bool {
22+
if B == nil {
23+
return true
24+
}
25+
guard let A = A else {
26+
return false
27+
}
28+
if A.val != B!.val {
29+
return false
30+
}
31+
return dfs(A.left, B?.left) && dfs(A.right, B?.right)
32+
}
33+
}

0 commit comments

Comments
 (0)