/**
* 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) {
let res = []
if (!root) {
return res
}
let queue = [];
// queue 此时已经是二维数组了
queue.push(root)
// 没有孩子节点的时候,queue.shift()之后为空则跳出循环
while (queue.length > 0) {
//获取每层的长度,放在循环体里面
let len = queue.length;
//声明临时数组
let tempArr = []
/**
* 例子:3,9,20,null,null,15,7
* 当前queue长度是1
* 当前的根值是3
* 所以遍历一次
* 判断左右树是否存在,如果存在,添加到queue数组中。
*/
for (let i = 0; i < len; i++) {
// shift()用于删除数组的开头元素,并返回被删除的元素
let nodes = queue.shift()
// 存放根节点
tempArr.push(nodes.val);
// 节点对象只有 left 和 right 作为属性!!!
if (nodes.left) {
queue.push(nodes.left)
}
if (nodes.right) {
queue.push(nodes.right)
}
}
res.push(tempArr);
}
return res
};