0x00 遍历方式
二叉树的遍历方式:
- 深度优先
- 广度优先
深度优先:
- 前序遍历:
中
左右 - 中序遍历:左
中
右 - 后序遍历:左右
中
广度优先:
- 层序遍历:遍历完同一层的所有节点后,继续往下层遍历
0x01 层序遍历
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
层序遍历:
func levelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else { return [] }
var array: [[Int]] = []
var stack: [TreeNode] = []
stack.append(root)
while !stack.isEmpty {
var res = [Int]()
var temp = [TreeNode]()
while !stack.isEmpty {
let node = stack.removeFirst()
res.append(node.val)
if let left = node.left {
temp.append(left)
}
if let right = node.right {
temp.append(right)
}
}
stack = temp
array.append(res)
}
return array
}