题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
注意:本题与主站 102 题相同:leetcode-cn.com/problems/bi…
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if (root == null) return [];
let queue = [root];
let result = [];
while(queue.length) {
let tmp = [];
let len = queue.length;
for (let i = 0; i < len; i++) {
let node = queue.shift();
node && tmp.push(node.val);
node.left && queue.push(node.left)
node.right && queue.push(node.right)
}
result.push(tmp)
}
return result;
};
题解
这道题目 从上到下打印二叉树I一个变种,解法依旧使用广度优先遍历(BFS), 但在遍历每一层时,需要用tmp = []数组保存每一层的元素。
具体执行流程:
-
如果树的根节点为空,则直接返回
[]。 -
初始化,声明结果数组
res = [], 包含根节点的队列queue = [root]。 -
循环当队列为空时终止
- 新建一个临时数组
tmp = [], 用于保留当层节点值 - 当前层循环,循环次数为当前层的节点数(即队列的长度)
- 出队, 队首元素出队,即
node = queue.shift() - 添加节点值, 将
node.val添加到res中, 即res.push(node.val) - 添加左右子节点,当
node.left和node.right都不为空,将左右子节点添加到tmp
- 出队, 队首元素出队,即
- 将当前结果
tmp添加res
- 新建一个临时数组
-
返回结果数组
res即可