515. 在每个树行中找最大值
描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)
示例
示例1
输入:root = [1,3,2,5,3,null,9]
输出:[1,3,9]
示例2
输入:root = [1,2,3]
输出:[1,3]
链接
https://leetcode.cn/problems/find-largest-value-in-each-tree-row/
解题思路
思路一: 广度优先遍历
- 首先根元素入队
- 当队列不为空的时候
- 求当前队列的长度length
- 依次从队列中取 length个元素进行比较,然后进入下一次迭代
/**
* @param {TreeNode} root
* @return {number[]}
*/
var largestValues = function(root) {
if (root == null) return [];
let res = [], queue = [root];
while(queue.length) {
// 将队列的第一个元素设置为max初始值
let max = queue[0].val, len = queue.length;
for (let i = 0; i < len; i++) {
let node = queue.shift();
max = max > node.val ? max: node.val;
node.left && queue.push(node.left);
node.right && queue.push(node.right);
}
// 最后把每一层的最大值放到res数组
res.push(max);
}
return res;
};
时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)
思路二: 深度优先搜索
/**
* @param {TreeNode} root
* @return {number[]}
*/
var largestValues = function (root) {
if (root === null) return [];
let res = [];
const dfs = function (node, depth) {
if (depth < res.length) {
let max = res[depth] > node.val ? res[depth]: node.val;
res[depth] = max;
} else {
res.push(node.val);
}
node.left && dfs(node.left, depth + 1);
node.right && dfs(node.right, depth + 1);
}
dfs(root, 0);
return res;
}