方法一:
分别用两个队列来存放当前层和下一层节点
- 用两个队列实现二叉树的广度优先搜索
- 把不同层的节点放入到不同的队列中
- 队列arr1只放当前遍历层的节点
- 队列arr2只放下一层的节点
- 每次执行完了arr1之后,就会将arr2交接给arr1,然后让arr2置空,为了个轮回做准备
var largestValues = function (root) {
let arr1 = [];
let arr2 = [];
if (root) {
arr1.push(root);
}
let result = [];
let max = -Infinity;
while (arr1.length) {
let node = arr1.shift();
max = Math.max(max, node.val);
if (node.left) {
arr2.push(node.left);
}
if (node.right) {
arr2.push(node.right);
}
if (!arr1.length) {
result.push(max);
max = -Infinity;
arr1 = arr2;
arr2 = [];
}
}
return result;
};
方法二:
Depth First Search(深度优先搜索,简称DFS)
var largestValues = function (root) {
let res = [];
const dfs = (node, d) => {
if (node == null) return;
if (res[d] || res[d] == 0) {
res[d] = Math.max(res[d], node.val);
} else {
res[d] = node.val;
}
dfs(node.left, d + 1);
dfs(node.right, d + 1);
};
dfs(root, 0);
return res;
};