From 96ca235ddcca2a036d9429ac9a7630295d2b04b3 Mon Sep 17 00:00:00 2001 From: AnastasiaStr Date: Mon, 5 Jun 2017 22:25:07 +0300 Subject: [PATCH] Swift implementation --- Swift/tree.playground/Contents.swift | 100 ++++++++++++++++++ Swift/tree.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 7644 bytes 4 files changed, 111 insertions(+) create mode 100644 Swift/tree.playground/Contents.swift create mode 100644 Swift/tree.playground/contents.xcplayground create mode 100644 Swift/tree.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 Swift/tree.playground/playground.xcworkspace/xcuserdata/anastasia.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/Swift/tree.playground/Contents.swift b/Swift/tree.playground/Contents.swift new file mode 100644 index 0000000..8abfb68 --- /dev/null +++ b/Swift/tree.playground/Contents.swift @@ -0,0 +1,100 @@ +import Foundation + + +class Node: CustomStringConvertible where T: CustomStringConvertible, T: Comparable { + + var value: T? + weak var parentNode: Node? + var subNodes = [Node]() + var subNodesCount: Int { + return subNodes.count + } + var isEmpty: Bool { + return subNodes.isEmpty + } + + init() { } + + init(value: T) { + self.value = value + } + + func addChild(node child: Node) { + child.parentNode = self + subNodes.append(child) + } + + func delete() { + parentNode!.subNodes = parentNode!.subNodes.filter({ $0 !== self }) + } + + var description: String { + var nodeValueStringRepresentation: String = "" + if let value = value { + nodeValueStringRepresentation = String(describing: value) + } + + let subNodesStringRepresentation: String = subNodes.map({ $0.description }).reduce("", { (result, string) -> String in + return result + " " + string + }) + return nodeValueStringRepresentation + ":{" + subNodesStringRepresentation + " }" + } + + func containsNode(withValue nodeValue: T) -> Bool { + if !subNodes.isEmpty { + return subNodes.map({ $0.containsNode(withValue: nodeValue) }).reduce(false, { $0 || $1 }) + } else { + return nodeValue == value + } + } + +} + +class Tree: CustomStringConvertible where T: CustomStringConvertible, T: Comparable { + + let root = Node() + + var description: String { + return "Tree: " + root.description + } + + func containsNode(withValue value: T) -> Bool { + return root.containsNode(withValue: value) + } + +} + + +// Initializing tree +let tree = Tree() +let root = tree.root +// Setting root value (this step is optional) +root.value = 999 + +// Initializing nodes and adding child nodes +let myNode = Node(value: 1) +myNode.addChild(node: Node(value: 10)) +myNode.addChild(node: Node(value: 20)) +myNode.addChild(node: Node(value: 30)) + +root.addChild(node: myNode) +root.addChild(node: Node(value: 2)) +root.addChild(node: Node(value: 3)) +root.addChild(node: Node(value: 4)) + +// Printing tree +print(tree) + +// Geting and printing subtree +if let subtree = root.subNodes.first { + print(subtree) +} + +// Checking if subtree have a tree with this value +print(tree.containsNode(withValue: 2)) +print(tree.containsNode(withValue: 7)) + + +// Node deletion +myNode.delete() +print(tree) diff --git a/Swift/tree.playground/contents.xcplayground b/Swift/tree.playground/contents.xcplayground new file mode 100644 index 0000000..63b6dd8 --- /dev/null +++ b/Swift/tree.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Swift/tree.playground/playground.xcworkspace/contents.xcworkspacedata b/Swift/tree.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Swift/tree.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Swift/tree.playground/playground.xcworkspace/xcuserdata/anastasia.xcuserdatad/UserInterfaceState.xcuserstate b/Swift/tree.playground/playground.xcworkspace/xcuserdata/anastasia.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..2f40170a86875bb7c1c2463b044cca8bdcfaac21 GIT binary patch literal 7644 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 Tlv|)QQa*tmQvOH(CKdb_N&Ieg literal 0 HcmV?d00001 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy