分行从上到下打印二叉树
题目:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例子:
给定二叉树
输出结果
6
4 8
3 5 7 9
分析:可以使用广度优先遍历的算法
(1)首先在0层获取根节点root,压入队列中。之后将level层作为数组的一维下标,这层的所有节点作为数组的二维元素。
(2)根据根节点的left和right查找1层的所有节点,并将节点元素压入队列,
当队列的第一个元素弹出时,将这个元素的左右节点压入队列。
(3)队列中弹出的元素根据level找到数组的一维下标,level相同的节点值添加到数组中一维数组下标对应的二维数组中。
解:
var levelOrder = function(root) {
if(!root){
return [];
}
//根节点root和层数0
const queue = [[root, 0]], res = [];
while(queue.length){
const [node, level] = queue.shift();
if(!res[level]){ //判断当前层是否初始化
res[level] = [];
}
res[level].push(node.val); //各层的元素
node.left && queue.push([node.left, level + 1]); //下一层的元素
node.right && queue.push([node.right, level + 1]); //下一层的元素
}
return res;
};
长按关注我吧