用 Golang 实现给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
给定二叉树: [3, 9, 20, null, null, 15, 7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ]
package main
import (
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func levelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
pool := make([]*TreeNode, 0)
pool = append(pool, root)
var res [][]int
for len(pool) > 0 {
count := len(pool)
children := make([]int, 0)
for count > 0 {
node := pool[0]
count--
if node.Left != nil {
pool = append(pool, node.Left)
}
if node.Right != nil {
pool = append(pool, node.Right)
}
children = append(children, pool[0].Val)
pool = pool[1:]
}
res = append(res, children)
}
return res
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
node5 := &TreeNode{
Val:7,
Left:nil,
Right:nil,
}
node4 := &TreeNode{
Val:15,
Left:nil,
Right:nil,
}
node3 := &TreeNode{
Val:20,
Left:node4,
Right:node5,
}
node2 := &TreeNode{
Val:9,
Left:nil,
Right:nil,
}
node1 := &TreeNode{
Val:3,
Left:node2,
Right:node3,
}
fmt.Println(levelOrder(node1))
}
程序运行后,控制台输出如下:
我们输入了测试用例,输出了正确结果。