func levelOrder(_ root: TreeNode?) -> [Int] {
guard let r = root else { return [] }
var result: [Int] = []
var queue: [TreeNode] = [r]
while queue.isEmpty == false {
let first = queue[0]
result.append(first.val)
if let left = first.left {
queue.append(left)
}
if let right = first.right {
queue.append(right)
}
queue.removeFirst()
}
return result
}