给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
- 例如,从根节点到叶节点的路径
1 -> 2 -> 3表示数字123。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
提示:
- 树中节点的数目在范围
[1, 1000]内 0 <= Node.val <= 9- 树的深度不超过
10
示例 1:
输入: root = [1,2,3]
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25
示例 2:
输入: root = [4,9,0,5,1]
输出: 1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495
从根到叶子节点路径 4->9->1 代表数字 491
从根到叶子节点路径 4->0 代表数字 40
因此,数字总和 = 495 + 491 + 40 = 1026
题解:
/**
* @description: 深度遍历 TC:O(n) SC:O(n)
* @author: JunLiangWang
* @param {*} root 给定根节点
* @return {*}
*/
function dfs(root){
/**
* 这题还是比较简单的,直接深度遍历就ok,递归参数除了子树根节点以外
* 再加上一个路径即可,我记录路径的方式是采用字符串,最后到达叶子节
* 点再将字符串转换为数字计算路径和
*/
/**
* @description: 利用递归回溯实现深度遍历
* @author: JunLiangWang
* @param {*} root 当前子树根节点
* @param {*} path 到底当前节点的路径
* @return {*}
*/
function recursionBacktracking(root,path){
// 如果节点为空直接返回0
if(!root){
return 0
}
// 如果为叶子节点则返回路径
if(!root.left&&!root.right){
return (path+root.val)*1
}
// 返回路径和
return recursionBacktracking(root.left,path+root.val)+recursionBacktracking(root.right,path+root.val)
}
// 执行递归返回结果
return recursionBacktracking(root,'')
}