剑指 Offer 32 - I. 从上到下打印二叉树

1212人浏览 / 0人评论

题目

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:

给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

题解

本题要求从上到下打印二叉树的每个节点,即为二叉树的广度优先搜索(BFS),此时可借助队列的先进先出特性来实现。

  • 初始化结果数组res为空,初始化辅助队列queue为root节点
s1.png
  • 循环执行:queue出队,将其val写入res,子节点入队queue
s2.png
  • 当queue为空时,循环结束,返回res作为结果
s3.png

代码

func levelOrder(root *TreeNode) []int {
	// 特殊场景:根节点为nil时,返回空数组
	if root == nil {
		return []int{}
	}
	// 初始化辅助队列
	var queue []*TreeNode = []*TreeNode{root}
	// 初始化结果数组
	res := make([]int, 0)
	// queue为空时,退出循环
	for len(queue) > 0 {
		// 出队
		node := queue[0]
		queue = queue[1:]
		// 写入出队节点val
		res = append(res, node.Val)
		// 写入出队节点子节点
		if node.Left != nil {
			queue = append(queue, node.Left)
		}

		if node.Right != nil {
			queue = append(queue, node.Right)
		}
	}
	return res
}

全部评论