leetcode-102.png
可以参考 104 111 题
层序遍历,那就是 BFS了,直接套BFS框架即可
BFS
var levelOrder = function (root) {
if (!root) {
return []
}
let res = []
let queue = []
queue.push(root)
res.push([root.val])
while (queue.length) {
let size = queue.length
let tmp = []
for (let i = 0; i < size; ++i) {
let node = queue.shift()
if (node.left) {
queue.push(node.left)
tmp.push(node.left.val)
}
if (node.right) {
queue.push(node.right)
tmp.push(node.right.val)
}
}
if (tmp.length) {
res.push(tmp)
}
}
return res
};
上面的代码并不优雅,有点冗余,在处理res以及tmp的过程中,有点太辣眼睛了
下面是优化过后的写法
var levelOrder = function (root) {
if (!root) {
return []
}
let res = []
let queue = []
queue.push(root)
while (queue.length) {
let size = queue.length
let tmp = []
for (let i = 0; i < size; ++i) {
let node = queue.shift()
tmp.push(node.val)
if (node.left) {
queue.push(node.left)
}
if (node.right) {
queue.push(node.right)
}
}
res.push(tmp)
}
return res
};
这样子,代码就优雅不少了
DFS
var levelOrder = function (root) {
if (!root) {
return []
}
let res = []
var dfs = function (root, level) {
if (!root) {
return
}
// 初始化 n 层的数组,便于 push 元素到 n 层的数组里面
// 第 n 层的时候,res的长度应该为 n
// 例如第 0 层的时候, res里面的长度就为 0
// 第 1 层的时候, [[3]], 此时再push []
// 就成了 [[3], []], 然后就 res[1].push(9)
// [[3], [9]]
if (res.length === level) {
res.push([])
}
res[level].push(root.val)
dfs(root.left, level + 1)
dfs(root.right, level + 1)
}
dfs(root, 0)
return res
};