题目
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
核心思路 【套用经典回溯】哈哈哈哈,套路
回溯,用经典回溯解答完成之后,对最终结果list进行reduce。
tips:如何套用经典回溯
-
- 停止条件
-
- list追加值
-
- 判断条件,并向res追加结论
-
- 执行下一层DFS
-
- 执行下一层DFS
-
- 回溯
得到双层数组,每一个内层数组都是一个答案,处理返回结构即可。
套用经典回溯,一次性通过
解答实例
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)
};