-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathContents.swift
62 lines (55 loc) · 1.59 KB
/
Contents.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
Given the root of a binary tree, return all root-to-leaf paths in any order.
A leaf is a node with no children.
Example 1:
Input: root = [1,2,3,null,5]
Output: ["1->2->5","1->3"]
Example 2:
Input: root = [1]
Output: ["1"]
Constraints:
- The number of nodes in the tree is in the range [1, 100].
- -100 <= Node.val <= 100
*/
/**
* Definition for a binary tree node.
*/
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
class Solution {
var list: [String] = []
var path: String = ""
func binaryTreePaths(_ root: TreeNode?) -> [String] {
guard let root = root else { return [] }
findPath(for: root, "")
return list
}
private func findPath(for node: TreeNode?, _ path: String) {
if node?.left == nil && node?.right == nil {
list.append(path + "\(node!.val)")
} else {
if node?.left != nil {
findPath(for: node?.left, path + "\(node!.val)" + "->")
}
if node?.right != nil {
findPath(for: node?.right, path + "\(node!.val)" + "->")
}
}
}
}
let s = Solution()
let root = TreeNode(1, TreeNode(2, nil, TreeNode(5)), TreeNode(3))
let r = s.binaryTreePaths(root)
print(r)