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

描述
给定一个仅包含数字0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。找出根节点到叶子节点的所有路径表示的数字之和
例如:
这颗二叉树一共有两条路径,根节点到叶子节点的路径 1→2 用数字 12 代替,根节点到叶子节点的路径 1→3 用数字13 代替
所以答案为+13=25 12+13=25
示例1
输入:{1,0}
返回值:10
示例2
输入:{1,#,9}
返回值:19

在遍历的过程中计算根节点到叶节点的所有路径和。

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int sum=0,path=0;
    int sumNumbers(TreeNode* root) {
        // write code here
        dfs(root);
        return sum;
    }
    void dfs(TreeNode* root)
    {
        if(!root) return;
        path=path*10+root->val;
        if(!root->left&&!root->right) sum+=path;//在遍历到叶子节点的时候会进行该操作
        dfs(root->left);
        dfs(root->right);
        path/=10; //遍历完左子树后,计算右子树需要保留根节点的值,右子树的值要抛弃
    }
};

LeetCode 129. 求根节点到叶节点数字之和
需要注意的是遍历是从上到下遍历,遍历过程中计算从根节点到叶子节点的路径和 t ,如果到达叶子节点
递归是从下到上递归,将左右两棵子树求和,直到返回到根节点为止。

class Solution {
public:
    int sumNumbers(TreeNode* root) {
        return dfs(root,0);
    }
    int dfs(TreeNode* root,int presum)
    {
        if(!root) return 0; //根节点为空,返回0
        int t=presum*10+(root==nullptr?0:root->val);//计算从根节点到当前节点的值
        auto left=dfs(root->left,t);
        auto right=dfs(root->right,t);
        if(root->left==nullptr && root->right==nullptr) return t;//如果遍历到叶子节点就可以直接返回t
       
        return left+right;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值