41. 求根节点到叶节点数字之和【LC129】

276 阅读1分钟

题目

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:

例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

image.png

image.png

核心思路 【套用经典回溯】哈哈哈哈,套路

回溯,用经典回溯解答完成之后,对最终结果list进行reduce。

tips:如何套用经典回溯

    1. 停止条件
    1. list追加值
    1. 判断条件,并向res追加结论
    1. 执行下一层DFS
    1. 执行下一层DFS
    1. 回溯

得到双层数组,每一个内层数组都是一个答案,处理返回结构即可。

套用经典回溯,一次性通过

解答实例

var sumNumbers = function (root) {
  const res = [];
  function DFS(curNode, list) {
    if (!curNode) { // 停止条件
      return;
    }
    list.push(curNode.val)

    if (!curNode.left && !curNode.right) {
      res.push([...list])
    }

    DFS(curNode.left, list)
    DFS(curNode.right, list)
    list.pop() //回溯
  }
  DFS(root, [])
  return res.reduce((prev, cur, idx) => {
    return prev + Number(cur.join(''))
  }, 0)
};