chencl1986/Blog

LeetCode题解:515. 在每个树行中找最大值,DFS,JavaScript,详细注释

chencl1986 opened this issue · 0 comments

原题链接:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/

解题思路:

  1. 用递归实现DFS遍历二叉树的所有节点。
  2. 开始递归前要思考,当前递归函数运行的是第n次递归,那么当前要做哪些处理。
  3. 先考虑的是,假设此时遍历到了最后一个节点为null,要给递归设置终止条件。
  4. 该题要求查找当前层的最大值,因此需要一个level索引标识当前所在的层,并且在遍历的过程中不断对比取最大值。
  5. 在遍历下一层节点时,将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;
};