Level Order Traversal
LeetCode 102 · View on LeetCode
BFS traversal using a queue. Process nodes level by level, snapshotting the queue size to separate levels. O(n) time, O(n) space.
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func levelOrder(root *TreeNode) [][]int {
if root == nil {
return nil
}
var result [][]int
queue := []*TreeNode{root}
for len(queue) > 0 {
size := len(queue)
level := make([]int, 0, size)
for i := 0; i < size; i++ {
node := queue[0]
queue = queue[1:]
level = append(level, node.Val)
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
result = append(result, level)
}
return result
}
func main() {
root := &TreeNode{Val: 3,
Left: &TreeNode{Val: 9},
Right: &TreeNode{Val: 20,
Left: &TreeNode{Val: 15},
Right: &TreeNode{Val: 7},
},
}
fmt.Println(levelOrder(root)) // [[3] [9 20] [15 7]]
}