本次以二叉树层次遍历为例:
package main
import (
"container/list"
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func levelOrder(root *TreeNode) [][]int {
result := [][]int{}
if root == nil {
return result
}
queue := list.New()
queue.PushBack(root)
for queue.Len() > 0 {
levelSize := queue.Len()
levelValues := []int{}
for i := 0; i < levelSize; i++ {
node := queue.Remove(queue.Front()).(*TreeNode)
levelValues = append(levelValues, node.Val)
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
result = append(result, levelValues)
}
return result
}
func main() {
// 创建一个示例二叉树
root := &TreeNode{Val: 3}
root.Left = &TreeNode{Val: 9}
root.Right = &TreeNode{Val: 20}
root.Right.Left = &TreeNode{Val: 15}
root.Right.Right = &TreeNode{Val: 7}
// 执行层次遍历
result := levelOrder(root)
// 输出结果
fmt.Println(result)
}