描述
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路
1. 普通的BFS 比较简单 只需要什么一个[]int 一个存放tree的队列 利用queue先进先出的规则打印value即可
2. 如果根据等级来保存[][]int的话 只要声明一个正在遍历的队列 一个保存下一层节点的队列即可
实现
func BFS(root *BinaryTree) []int {
valueList := make([]int, 0)
queue := make([]*BinaryTree, 0)
if root == nil{
return valueList
}
queue = append(queue, root)
for len(queue) > 0 {
first := queue[0]
valueList = append(valueList, first.Value)
queue = queue[1:]
if first.Left != nil {
queue = append(queue, first.Left)
}
if first.Right != nil {
queue = append(queue, first.Right)
}
}
return valueList
}
func BFSLevelOrder(root *TreeNode) [][]int {
queue := make([]*TreeNode, 0)
valueList := make([][]int, 0)
if root == nil{
return valueList
}
queue = append(queue, root)
for len(queue) > 0 {
tmpQueue := make([]*TreeNode, 0)
tmpValueList := make([]int, 0)
for len(queue) > 0 {
first := queue[0]
queue = queue[1:]
tmpValueList = append(tmpValueList, first.Val)
if first.Left != nil {
tmpQueue = append(tmpQueue, first.Left)
}
if first.Right != nil {
tmpQueue = append(tmpQueue, first.Right)
}
}
queue = queue[0:0]
queue = append(queue, tmpQueue...)
valueList = append(valueList, tmpValueList)
}
return valueList
}