从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:该题和JS 剑指 Offer 32 - I. 从上到下打印二叉树题目类似,只是在最后结果输出的时候相对复杂一些。
定义
count来表示当前遍历的树的层数
list用来保存树的节点
result用来保存最终的结果
countNum用来表示第count层节点的数量
- count = 0时,countNum= 1,因此该层只有一个数
- count = 1时,countNum= 2, 该层有两个数
- count = 2时,countNum= 2, 该层有两个数
/**
* 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 count = 0; //当前的层数
let list = [root];
let result = []; // 最终的结果
while(list.length){
if(!root) return [];
result[count] = []; // 第count层的结果
let countNum = list.length; // 第count层的节点数
while(countNum --){
let temp = list.shift();
result[count].push(temp.val);
if(temp.left) list.push(temp.left);
if(temp.right) list.push(temp.right);
}
count++;
}
return result;
};