Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ga-google-analytics domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/posttrau/public_html/mdtWordpress/wp-includes/functions.php on line 6121

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the themeisle-companion domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/posttrau/public_html/mdtWordpress/wp-includes/functions.php on line 6121

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the foxiz-core domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/posttrau/public_html/mdtWordpress/wp-includes/functions.php on line 6121

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the hestia domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/posttrau/public_html/mdtWordpress/wp-includes/functions.php on line 6121
BST and Breadth first search algorithm in Swift - My Day To-Do

Following on from my last post, this is a short post with code samples to achieve the above on Swift. I won’t talk too much about the background to Binary Search Trees or the breadth first search algorithm, instead just focus on the code. If you need to get more of a background to this post, then best have a read of my previous post, Breadth-First Search in Typescript and Javascript.

Breadth first search algorithm

Just like my previous post, this code solves the exact same problem, except here it’s done in Swift instead of Typescript or Javascript.

class Node<T: Comparable> {
    var key: T!
    var left: Node?
    var right: Node?

    init(key:T) {
        self.key = key
    }
}
class Queue<T> {
    private var items  = [T]()

    func add(item: T) {
        items.append(item)
    }
    func pop() -> T? {
        return items.removeFirst()
    }
    func isEmpty() -> Bool {
        return (items.count == 0)
    }
}
class BinaryTree<H:Comparable> {

    private var rootNode: Node<H>?

    func setRoot(node: Node<H> ) {
        self.rootNode = node
    }

    func addNode(key: H) {
        rootNode = addNodeByReursion(currentNode: rootNode, key: key)
    }
    func addNodeByReursion(currentNode: Node<H>?, key: H) -> Node<H>? {
        if let cNode = currentNode {
            if key < cNode.key {
                cNode.left = addNodeByReursion(currentNode: cNode.left, key: key)
            } else if key > cNode.key {
                cNode.right = addNodeByReursion(currentNode: cNode.right, key: key)
            }
        } else {
            return Node<H>(key: key)
        }
        return currentNode
    }
    func levelOrderTraversal(from: Int?) {
        //for this purpose, let's ignore from
        if let rn = rootNode {
            let nodeQueue:Queue<Node<H>> = Queue<Node<H>>()
            nodeQueue.add(item: rn)
            while !nodeQueue.isEmpty() {
                let cNode = nodeQueue.pop()!
                print(cNode.key ?? "")
                if let left = cNode.left {
                    nodeQueue.add(item: left)
                }
                if let right = cNode.right {
                    nodeQueue.add(item:right)
                }
            }
        } else {
            return
        }
    }
}

let tree = BinaryTree<Int>()
tree.addNode(key: 7)
tree.addNode(key: 8)
tree.addNode(key: 4)
tree.addNode(key: 3)
tree.levelOrderTraversal(from: nil)

Like the previous version, we have 3 classes to create a Queue, Node and BinaryTree.

You can copy and paste all this code into your Xcode playground to run it. When you run it, you will see the numbers at each level .printed to console starting from the root.

Get updates?

I can’t quite tell, why I feel the Typescript version is better to look at? could it be because it reminds me of modern Java and Java is first love? i.e. first programming language that I worked with when starting out and the language I have the most experience with.

As usual, if you find any of my posts useful support us by  buying or even trying one of our products and leave us a review on the app store.

[appbox appstore 1020072048]

[appbox appstore 1066820078]

[appbox appstore 1367294518]

[appbox appstore 1468791922]

[appbox googleplay com.mydaytodo.android.numbersgame]

[appbox appstore  1468826652]

[appbox appstore  1470834613]

[appbox googleplay com.mydaytodo.simplenotes]

[appbox appstore  1478331765]


0 Comments

Leave a Reply

Avatar placeholder
Verified by MonsterInsights