剑指 Offer 32 - II. 从上到下打印二叉树 II
题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
复制代码
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
复制代码
解题思路
深度优先遍历
通过level变量记录二叉树递归层级;将枚举到的二叉树节点值塞进指定层级中即可
代码
var levelOrder = function (root) {
const result = []
helper(root, 0)
return result
function helper(node, level) {
if (node === null) return
if (result[level] === undefined) {
result[level] = [node.val]
} else [result[level].push(node.val)]
helper(node.left, level + 1)
helper(node.right, level + 1)
}
}
复制代码
广度优先遍历
思路
将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。
代码
var levelOrder = function(root) {
if(root === null) return []
const result = [];
let stack = [root];
while(stack.length){
const path = [];
for(let i = stack.length-1 ; i >=0 ; i--){
let temp = stack.shift();
path.push(temp.val);
temp.left && stack.push(temp.left)
temp.right && stack.push(temp.right)
}
result.push(path)
}
return result
};
复制代码