题目:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:给定二叉树: [3,9,20,null,null,15,7]3/ \9 20/ \15 7返回其层次遍历结果:
[[3],[9,20],[15,7]
]
思考:
-
题目要求从上到下按层打印二叉树,也就是二叉树的广度优先搜索(BFS)
-
BFS 通常借助 队列 的先入先出特性来实现
-
头结点先入队(需要先判断头结点不为空,防止空指针)
-
然后开始循环,条件为队列不为空
-
循环拿出队列中现有的所有结点,也就是本层节点,共 queue.size() 个,采用 i–的方式循环,因为队列在不停出队,长度是变化的
-
拿出每一个结点加入到一个 list,即本层的索引结点,然后判断本层节点的左右结点是否存在,存在就加入到对列中,为下层的节点
-
将本层节点的 list 加入到结果集合,开始下层循环
题解:
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();//辅助对列Queue<TreeNode> queue = new LinkedList<>();//这里需要判断一下,不然root为null会空指针if (root != null) queue.add(root);while (!queue.isEmpty()){List<Integer> tmp = new ArrayList<>();//用i--,i++不行for (int i = queue.size(); i > 0 ; i--) {TreeNode node = queue.poll();if (node.left != null) queue.add(node.left);if (node.right != null) queue.add(node.right);tmp.add(node.val);}res.add(tmp);}return res;}
}