【JS每日一算法】🟨123.求根节点到叶节点数字之和(深度遍历)

331 阅读2分钟

给你一个二叉树的根节点 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

题解:

个人博客

更多JS版本题解点击链接关注该仓库👀

/**
 * @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,'')
}