记录二叉树系列算法(二叉树根节点到叶子节点的所有路径和)

105 阅读1分钟

二叉树根节点到叶子节点的所有路径和

// 存储二叉树根节点到叶子节点的所有路径和
let path: number[] = []
// 存储最终结果的数组
let res: string[] = []
// 递归函数
function traversal(root: TreeNode) {
    // 递归结束条件
    if (root == null) return
    // 存储递归中收集的路径值
    path.push(root.val)
    //确定单条递归逻辑的时候只有当左右节点都为null就是到了叶子节点(将收集的path存入res数组)
    if (root.left == null && root.right == null) {
        let a = ''
        for (let i = 0; i < path.length; i++) {
            a += path[i].toString()
        }
        res.push(a)
        return;
    }
    // 遍历左子树
    if (root.left) {
        // path.pop()进行回溯
        traversal(root.left!); path.pop()
    };
     // 遍历右子树
    if (root.right) {
       // path.pop()进行回溯
        traversal(root.right!); path.pop()
    };
}
 function sumNumbers(root: TreeNode): number {
    res.length = 0
    let count = 0;
    if (root == null) return 0
    traversal(root)
    for (let i = 0; i < res.length; i++) {
        count += parseInt(res[i])
    }
    return count;
}