vitasuper
11/29/2019 - 6:30 AM

Inorder tree traversal in Swift

/**
 * Question Link: https://leetcode.com/problems/binary-tree-level-order-traversal/
 * Primary idea: use a queue to help hold TreeNode, and for each level add a new Int array
 * Time Complexity: O(n), Space Complexity: O(n)
 * 
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
 
class BinaryTreeLevelOrderTraversal {
    func levelOrder(_ root: TreeNode?) -> [[Int]] {
        var res = [[Int]]()
        
        guard let root = root else {
            return res
        }
        
        var currentLevel = [root]
        
        while !currentLevel.isEmpty {
            let currentLevelVals = currentLevel.map { $0.val }
            
            // add current level vals
            res.append(currentLevelVals)
            
            // add next level nodes
            currentLevel = currentLevel.flatMap { [$0.left, $0.right] }.compactMap { $0 }
        }
        
        return res
    }
}