Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
86
Task/Tree-traversal/Swift/tree-traversal.swift
Normal file
86
Task/Tree-traversal/Swift/tree-traversal.swift
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
class TreeNode<T> {
|
||||
let value: T
|
||||
let left: TreeNode?
|
||||
let right: TreeNode?
|
||||
|
||||
init(value: T, left: TreeNode? = nil, right: TreeNode? = nil) {
|
||||
self.value = value
|
||||
self.left = left
|
||||
self.right = right
|
||||
}
|
||||
|
||||
func preOrder(function: (T) -> Void) {
|
||||
function(value)
|
||||
if left != nil {
|
||||
left!.preOrder(function: function)
|
||||
}
|
||||
if right != nil {
|
||||
right!.preOrder(function: function)
|
||||
}
|
||||
}
|
||||
|
||||
func inOrder(function: (T) -> Void) {
|
||||
if left != nil {
|
||||
left!.inOrder(function: function)
|
||||
}
|
||||
function(value)
|
||||
if right != nil {
|
||||
right!.inOrder(function: function)
|
||||
}
|
||||
}
|
||||
|
||||
func postOrder(function: (T) -> Void) {
|
||||
if left != nil {
|
||||
left!.postOrder(function: function)
|
||||
}
|
||||
if right != nil {
|
||||
right!.postOrder(function: function)
|
||||
}
|
||||
function(value)
|
||||
}
|
||||
|
||||
func levelOrder(function: (T) -> Void) {
|
||||
var queue: [TreeNode] = []
|
||||
queue.append(self)
|
||||
while queue.count > 0 {
|
||||
let node = queue.removeFirst()
|
||||
function(node.value)
|
||||
if node.left != nil {
|
||||
queue.append(node.left!)
|
||||
}
|
||||
if node.right != nil {
|
||||
queue.append(node.right!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typealias Node = TreeNode<Int>
|
||||
|
||||
let n = Node(value: 1,
|
||||
left: Node(value: 2,
|
||||
left: Node(value: 4,
|
||||
left: Node(value: 7)),
|
||||
right: Node(value: 5)),
|
||||
right: Node(value: 3,
|
||||
left: Node(value: 6,
|
||||
left: Node(value: 8),
|
||||
right: Node(value: 9))))
|
||||
|
||||
let fn = { print($0, terminator: " ") }
|
||||
|
||||
print("pre-order: ", terminator: "")
|
||||
n.preOrder(function: fn)
|
||||
print()
|
||||
|
||||
print("in-order: ", terminator: "")
|
||||
n.inOrder(function: fn)
|
||||
print()
|
||||
|
||||
print("post-order: ", terminator: "")
|
||||
n.postOrder(function: fn)
|
||||
print()
|
||||
|
||||
print("level-order: ", terminator: "")
|
||||
n.levelOrder(function: fn)
|
||||
print()
|
||||
Loading…
Add table
Add a link
Reference in a new issue