LeetCode题解:515. 在每个树行中找最大值,DFS,JavaScript,详细注释
chencl1986 opened this issue · 0 comments
chencl1986 commented
原题链接:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/
解题思路:
- 用递归实现DFS遍历二叉树的所有节点。
- 开始递归前要思考,当前递归函数运行的是第n次递归,那么当前要做哪些处理。
- 先考虑的是,假设此时遍历到了最后一个节点为null,要给递归设置终止条件。
- 该题要求查找当前层的最大值,因此需要一个level索引标识当前所在的层,并且在遍历的过程中不断对比取最大值。
- 在遍历下一层节点时,将index+1,作为下一层的标识。
/**
* @param {TreeNode} root
* @return {number[]}
*/
var largestValues = function (root) {
let result = []; // 存储每一行的最大值
// 使用BFS进行遍历,再通过每一层的索引,生成每一层的最大值数据
function bfs(node, level) {
// 递归终止条件
// 如果当前节点不存在,则退出递归
if (!node) {
return;
}
// 将当前节点的值,与已存储的值相比,取最大值
typeof result[level] === 'number'
? (result[level] = Math.max(node.val, result[level]))
: (result[level] = node.val);
// 计算下一层的标识
const newLevel = level + 1;
// 遍历子节点,并传入下一层的索引
bfs(node.left, newLevel);
bfs(node.right, newLevel);
}
// 从根节点开始遍历,对应索引为0
bfs(root, 0);
return result;
};