-
-
Notifications
You must be signed in to change notification settings - Fork 359
/
Copy pathtree.swift
104 lines (81 loc) · 2.19 KB
/
tree.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
class Node {
var value: Int
var children: [Node]?
init(value: Int, children: [Node]) {
self.value = value
self.children = children
}
}
func createTree(numRows: Int, numChildren: Int) -> Node {
let node = Node(value: numRows, children: [])
if numRows > 0 {
for _ in 1...numChildren {
let child = createTree(numRows: numRows-1, numChildren: numChildren)
node.children?.append(child)
}
}
return node
}
func dfsRecursive(node: Node) {
print(node.value)
for child in node.children! {
dfsRecursive(node: child)
}
}
func dfsRecursivePostOrder(node: Node) {
for child in node.children! {
dfsRecursivePostOrder(node: child)
}
print(node.value)
}
func dfsRecursiveInOrderBinary(node: Node) {
if node.children?.count == 2 {
dfsRecursiveInOrderBinary(node: node.children![0])
print(node.value)
dfsRecursiveInOrderBinary(node: node.children![1])
} else if node.children?.count == 1 {
dfsRecursiveInOrderBinary(node: node.children![0])
print(node.value)
} else if node.children?.count == 0 {
print(node.value)
} else {
print("Not a binary tree!")
}
}
func dfsStack(node: Node) {
var stack = [node]
var temp: Node
while stack.count > 0 {
temp = stack.popLast()!
print(temp.value)
for child in temp.children! {
stack.append(child)
}
}
}
func bfsQueue(node: Node) {
var queue = [node]
var temp: Node
while queue.count > 0 {
temp = queue.remove(at: 0)
print(temp.value)
for child in temp.children! {
queue.append(child)
}
}
}
func main() {
let root = createTree(numRows: 3, numChildren: 3)
print("Using recursive DFS:")
dfsRecursive(node: root)
print("Using recursive postorder DFS:")
dfsRecursivePostOrder(node: root)
print("Using stack-based DFS:")
dfsStack(node: root)
print("Using queue-based BFS:")
bfsQueue(node: root)
let rootBinary = createTree(numRows: 3, numChildren: 2)
print("Using In-order DFS:")
dfsRecursiveInOrderBinary(node: rootBinary)
}
main()