刷题使我快乐,满脸开心.jpg

  • 来源:力扣(LeetCode)
  • 链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • -1000 <= Node.val <= 1000

思路

其实就是个BFS

代码

func levelOrder(root *TreeNode) [][]int {
	res := make([][]int, 0)
	if root == nil {
		return res
	}
	preLevelNodes := []*TreeNode{root}
	for level:=0; len(preLevelNodes) > 0; level++ {
		res = append(res, make([]int, 0, len(preLevelNodes)))
		nextLevelNodes := make([]*TreeNode, 0)
		for _, nodeItem := range preLevelNodes {
			res[level] = append(res[level], nodeItem.Val)
			if nodeItem.Left != nil {
				nextLevelNodes = append(nextLevelNodes, nodeItem.Left)
			}
			if nodeItem.Right != nil {
				nextLevelNodes = append(nextLevelNodes, nodeItem.Right)
			}
		}
		preLevelNodes = nextLevelNodes
	}
	return res
}