题目简述:树的层序遍历
对于这种题目,一般来说就有两种解法了,BFS以及DFS
BFS也是一套模板,比较通用
DFS在这里的解法,就会有点非主流的感觉,但是代码层面上面来说,应该不太难懂
BFS
var levelOrder = function (root) {
if (!root) return []
let res = []
let queue = [root]
while (queue.length) {
let size = queue.length
let level = []
for (let i = 0; i < size; ++i) {
let node = queue.shift()
level.push(node.val)
if (node.left) queue.push(node.left)
if (node.right) queue.push(node.right)
}
res.push(level)
}
return res
};
DFS
var levelOrder = function (root) {
if (!root) return []
let res = []
var dfs = function (level, node) {
if (!node) return
// 初始化 n 层的数组,便于 push 元素到 n 层的数组里面
// 第 n 层的时候,res的长度应该为 n
// 例如第 0 层的时候, res里面的长度就为 0
// 第 1 层的时候, [[3]], 此时再push []
// 就成了 [[3], []], 然后就 res[1].push(9)
// [[3], [9]]
if (level >= res.length) {
res.push([])
}
res[level].push(node.val)
dfs(level + 1, node.left)
dfs(level + 1, node.right)
}
dfs(0, root)
return res
};