思路
- 方法一:广度优先
- 方法二:深度优先
代码
➥ JavaScript(方法一)
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function (root) {
if (!root) return []
const result = []
let list1 = [root] // 当前层的节点
let list2 = [] // 下一层要遍历的节点
while (list1.length > 0) {
const list = []
result.push(list)
// 遍历当前层的节点,会获得下一层的节点
for (let i = 0; i < list1.length; i++) {
const node = list1[i]
const { val, left, right } = node
list.push(val)
left && list2.push(left)
right && list2.push(right)
}
list1 = list2
list2 = []
}
return result
};
➥ JavaScript(方法二)
var levelOrder = function (root) {
if (!root) return []
const result = []
const dfs = ({ val, left, right }, level) => {
if (!result[level]) {
result[level] = [val]
} else {
result[level].push(val)
}
level += 1
left && dfs(left, level)
right && dfs(right, level)
}
dfs(root, 0)
return result
};