【算法题】二叉树根节点到叶子节点的所有路径和

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

https://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83?tpId=196&tqId=37049&rp=1&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page&difficulty=undefined&judgeStatus=undefined&tags=&title=

这题说的是计算从根节点到叶子节点的所有路径和,实际上每一条从根节点到叶子节点都构成了一个数字,累加这些数字即可,这些数字只有在叶子节点才能累加,如下图所示。

alt alt

    public int sumNumbers(TreeNode root) {
        return dfs(root, 0);
    }

    private int dfs(TreeNode root, int sum) {
        if (root == null) // 终止条件
            return 0;
        // 计算当前节点的值
        sum = sum * 10 + root.val;
        // 如果当前节点是叶子节点,说明找到了一条完整路径,
        // 直接返回这条路径的值。
        if (root.left == null && root.right == null)
            return sum;
        // 如果当前节点不是叶子结点,返回左右子节点的路径和
        return dfs(root.left, sum) + dfs(root.right, sum);
    }

public:
    int sumNumbers(TreeNode *root) {
        return dfs(root, 0);
    }

    int dfs(TreeNode *root, int sum) {
        if (root == nullptr) // 终止条件
            return 0;
        // 计算当前节点的值
        sum = sum * 10 + root->val;
        // 如果当前节点是叶子节点,说明找到了一条完整路径,
        // 直接返回这条路径的值。
        if (root->left == nullptr && root->right == nullptr)
            return sum;
        // 如果当前节点不是叶子结点,返回左右子节点的路径和
        return dfs(root->left, sum) + dfs(root->right, sum);
    }

各大厂算法面试题已经整理好了,请看这里:《算法专栏》

#笔试#

为了应对春招和秋招找工作,我经过长时间的收集和整理了各大厂的算法面试题,所有的算法题我都已经做了实现,大家可以根据自己需要面试的大厂选择练习即可。适宜人群: 在校生、社招求职者及自学者。

全部评论

相关推荐

03-29 19:11
门头沟学院 Java
wyp_davis:是可以这样的,不过只要交钱就是假的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-18 14:29
牛客604067584号:感觉算法卷的人少很多,毕竟只有一部分bg还不错的硕士才会考虑算法,虽然hc不如后端,但是竞争真的少很多。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务