function levelOrder(root: TreeNode | null): number[][] {
if (!root) {
return []
}
const result = []
const stack = [] // 当前层的栈
let depth = 0;
stack.push(root)
// 遍历多少层
while (stack.length) {
// 添加最新一层的空数组
// 也可以直接 result.push([])
result[depth] = []
const size = stack.length
// 遍历当前层
for (let i = 0; i < size; i += 1) {
const currentRoot = stack.shift()
// 用 shift 按照顺序取元素,然后添加到对应层的结果中
result[depth].push(currentRoot.val)
if (currentRoot.left) {
stack.push(currentRoot.left)
}
if (currentRoot.right) {
stack.push(currentRoot.right)
}
}
// 增加深度
// 也可以使用 result.length 来获取深度
depth += 1
}
return result
}
这样只是收集到的结果是正确的,遍历顺序还是深度遍历,如果遇到需要提前结束的场景就不支持了
function levelOrder(root: TreeNode | null): number[][] {
if (!root) {
return []
}
const result = []
// 定义递归函数
function traverse(root: TreeNode, depth: number) {
// 如果对应的深度还没有创建数组,先创建
if (!result[depth]) {
result[depth] = []
}
// 前中后序遍历递归的顺序都是正确的
// 往对应的位置 push 当前的结果
// result[depth].push(root.val)
// 递归处理左结点
if (root.left) {
traverse(root.left, depth + 1)
}
// 递归处理右结点
if (root.right) {
traverse(root.right, depth + 1)
}
}
traverse(root, 0)
return result
}