LeetCode热题100--102. 二叉树的层序遍历--中等
1. 题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
2. 题解
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();List<List<Integer>> res = new ArrayList<>();if (root != null) queue.add(root);while (!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();for(int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();tmp.add(node.val);if (node.left != null) queue.add(node.left);if (node.right != null) queue.add(node.right);}res.add(tmp);}return res;}
}
3. 解析
出自:102. 二叉树的层序遍历(广度优先遍历,清晰图解)
-
1-4行:定义了TreeNode类,用于创建具有值、左子节点和右子节点的二叉树节点。
-
6-8行:声明并初始化一个队列来存储待处理的节点,以及一个结果列表来记录层次遍历的结果。如果根节点不为空,则将其加入队列中。
-
10-24行:开始循环,直到队列为空。在每次迭代中,创建一个新的临时列表tmp并初始化其索引值为与当前队列中的元素数量相同。这是为了记录每一层的节点数。然后从队列头部移除节点,将其值加入到tmp中,并将它的左子节点和右子节点(如果存在)添加至队列尾部以供下一轮处理。最后,将这个临时列表tmp加入结果列表res中。
-
26行:返回包含所有层级节点的值的二维数组res。